詳しい説明はあとあと! 決まりごとという型を作ってしまうと、自分で自分のクビを絞めることになる場合も。 例えば「仕事を始める前には必ずストレッチをやろう」という型を作ると、当然それを守れない時がでてくるわけです。その日はずっと気持ちが悪い。ずっと気持ちが悪いのは、型という不快になるためのスイッチを自分で仕掛けたからですよね。
という話とは全く関係ない上に唐突なのですが、PHPの勉強を始めたいと思います。
PHPのテストには、CODA(Mac版のみです)というソフトを使うことにします。 画面を上下2分割にして上をエディタ、下をプレビューにする。こうしておくと保存するたびにプレビュー画面が更新されるので、ほぼリアルタイムでの動作確認が可能です。
「.php」や「.ini」ファイルの文字コードをEUC-JP、改行コードをLFに統一したほうが良いとのことなので、とりあえずそれに従います。
まずはこれをやらないと始められないということで、
<?php
print ('Hello, World!');
?>
Hello, World!
それでは、PHPの勉強を始めたいと思います。以下、「独習PHP」を元に、要約メモしておきたいと思います。
変数
コメントタグ
単一行は//もしくは#(非推奨)、複数行は/*〜*/。
変数を使う
<?php
$data='これが変数です';
print($data);
?>
これが変数です
変数名の命名規則
- 変数名は$で始まること(×:data、○:$data)
- 変数名の2文字目は英字かアンダースコアであること(×:$9_z、○:$z_9)
- 変数名の3文字目以降は、英数字、アンダースコアのいずれかであること(×:$%&、$名前、○:$name、$btn_01)
- 変数名の大文字/小文字は区別される
ダブルクォーテーション(")と、シングルクォーテーション(')の違い
<?php
$title='これ'; $data1="「 $title 」は変数です。";
$data2='「 $title 」は変数です。';
print($data1);
print($data2);
?>
「 これ 」は変数です。 「 $title 」は変数です。
ダブルクォーテーション(")は変数として解釈されるが、シングルクォーテーション(')は文字列としてそのまま出力される。変数名の前後はスペースで明確に区切ること。
可変変数
先頭に$をふたつつけることで、変数名を変数によって決めることができる変数のこと。
<?php
$x='title';
$title='タイトル名です';
print($$x);
?>
タイトル名です
配列
仕切りのある入れ物のこと。ひとつの変数に対してひとつの値を持つものをスカラー変数といい、配列のように複数の値を持つことができる入れ物のことを非スカラー変数という。
array命令
array(要素1,要素2,...) array(キー1=>要素1,キー1=>要素1,...)
通常配列
<?php
$data=array(0=>'ひとつ',1=>'ふたつ',2=>'みっつ',3=>'よっつ');
print($data[3]);
?>
よっつ
連想配列
<?php
$data=array('ひとつ'=>'1個','ふたつ'=>'2個','みっつ'=>'3個');
print($data['みっつ']);
?>
3個
キーが省略された場合には、その時点でのキーの最大値+1が振り分けられる。 デフォルトでは「0,1,2,3,...」だけど、下記の場合キー2を飛ばしてキー3が割り振られているので、次からはキー4,5,6,...という風に割り振られていく。
<?php
$data=array('1'=>'one','3'=>'three','four','five','six');
print($data[6]);
?>
six
ネスト構造(入れ子)
<?php
$data=array(
array('A','B'),
array('C','D'),
array('E','F'),
);
print ($data[2][0]);
?>
E
ブラケット([])構文
<?php
$data=array('ひとつ','ふたつ','みっつ');
$data[0]='いくつ'; //キー0の要素を書き換え
$data[]='よっつ'; //最後に要素を追加
print($data[0]);
print('<br />'); //改行する
print($data[3]);
?>
いくつ よっつ
print_r命令
非スカラー変数の内容を視覚的に見やすい形で出力する。 ブラウザ上では改行されていない状態で表示されるので、ブラウザでソースを表示すると見やすい。
<?php
$data=array('ひとつ','ふたつ','みっつ');
$data[0]='いくつ';
$data[]='よっつ';
print_r($data)
?>
Array ( [0] => いくつ [1] => ふたつ [2] => みっつ [3] => よっつ )
スーパーグローバル変数
$_POST
POST形式のHTMLフォーム(
上記のようなHTMLフォームから入力された値を取得する場合は、
post2.php
名前:<?php print($_POST['name']); ?>
好きな食べ物:<?php print_r($_POST['food']); ?>
名前:山田 好きな食べ物:Array ( [0]=>orange [1]=>apple [2]=>strawberry )
$_POSTの中身は連想配列になっているので、個々の要素値にアクセスするには$_POST['要素名']のようにする。チェックボックスやリストボックスのように同名の要素が複数の値を持つ場合には、要素を名前[]のように指定する。print_r命令ではなく、個々の値にアクセスする場合は、
$_POST['food'][0]
とする。
$_GET
クエリ情報を取得するためのスーパーグローバル変数。クエリ情報とは、URLの末尾以降(?〜)に付加されたキー名=値のセットのことをいう。キー名=値のセットを&で連結して、複数の情報を送信することも可能。
get.php
名前:<?php print($_GET['name']); ?>
性別:<?php print($_GET['sex']); ?>
上記のget.phpに対して、
http://localhost/~user/get.php?name=Ohmori&sex=male
でアクセスすると
名前:Ohmori 性別:male
と表示される。
クエリ情報の制約
- 送信可能なデータサイズに制限がある ポストデータには原則としてサイズ制限がないのに対して、クエリ情報のデータサイズはWebサーバが受け取ることができるURLの長さに制約される。一般的には最大でも数百バイト程度。
- 予約文字やマルチバイト文字は使用できない ポストデータでは原則としてあらゆる文字データを扱うことが可能だが、クエリ情報ではファイル名との区切り文字である?をはじめ、&や%、空白、マルチバイト文字(日本語)などは使用できない。これらがクエリ情報に含まれている可能性がある場合には、あらかじめ無害な文字列(%xxの形式)に変換する必要がある。urlencodeという命令でこうした変換処理(URLエンコード)を行うことができる。
- データが露出する ポストデータはリクエスト情報の本体として送信されるので問題ないが、クエリ情報はその性質上、ブラウザのアドレス欄にそのまま露出してしまうし、サーバのログに記録させる場合がある。ログインパスワードのような情報をクエリ情報を介してやりとりするのは好ましくない。
$_FILES
アップロードしたファイルに関する情報を取得するためのスーパーグローバル変数。ファイルのアップロード機能を作成することができる。
file1.php
<form method="POST" action="file2.php" enctype="multipart/form-data">
ファイルのパス:
<input type="file" name="uploaded" size="50" />
<input type="submit" value="アップロード" />
</form>
file2.php
<?php
move_uploaded_file($_FILES['uploaded'['tmp_name'], './doc/'.$_FILES['uploaded']['name']);
print ('アップロードに成功しました');
?>
ファイルをアップロードするには、