2011年4月1日

僕と一緒に始めよう!初心者と始めるPHP入門[謎解き編]

エイプリルフールも過ぎたので青字で少し追記しました。

PHPは掲示板とかカウンタとか作れる凄いやつです。早速書いてみましょう!
<?
echo "こんにちは!";
?>
これを hello.php というファイル名で保存してレンタルサーバにアップロードしましょう。
アップロードされたファイルにアクセスして「こんにちは!」と表示されれば成功です。
上手く動かないサーバは壊れている可能性があるので解約したほうがいいかも知れません!
PHP のタグは <? よりも <?php で書き始めるようにする癖をつけましょう。<? だと XML 宣言と誤認識したりしてしまうので XML や XHTML の出力がちょっと面倒になるし、その誤認識を回避するために PHP のオプションによって無効化されていることもあるので <?php でないと動かないサーバも少なくありません。
更に、?> は PHP のみを記述するファイルの場合は書く必要がありません。出力のバッファリングをしていなければ <?php の前や ?> の後ろに余計な文字が混入しただけで header() 関数でエラーが出たりもするので問題を未然に防ぐためにも ?> は省略するのが望ましいと言えます。
Zend Framework のコーディング規約にもその旨の文章があります。

じゃあ次あれやりましょ! ループ。
PHPを覚えようとしている皆さんなら誰もが知っていると思いますがPHPは凄いんです。
複数のデータを一気に扱うのも超簡単なんですよ。
<?
$datas[] = "今日は";
$datas[] = gmdate("Y年m月d日");
$datas[] = "です。";
$datas[] = "何の日でしょうか?";
foreach($datas as &$data){
  echo $data;
}
$data = null;
?>
こうすると1箇所にしか書いてない echo が何度も実行されて
「今日は2011年04月01日です。何の日でしょうか?」になったりします!
今回は使い終わった変数に null を代入して後始末もしてみました!
gmdate() はグリニッジ標準時での時間をフォーマットして返す関数です。この例では年月日しか表示しないので問題に気付きにくいですが、時分秒まで表示して本当に意図した時間が出るか確かめておきましょう。環境設定が間違っていなければ gmdate() ではなく date() の方が意図した結果になっているはずです。多言語対応にする場合でもタイムゾーンの切り替えを date_default_timezone_set() で行えたりするので date() が便利でしょう。
$datas を使用する前に $datas = array(); として変数を初期化したほうがいいでしょう。例えば $datas = 1; の状態で $datas[] = "test"; などとしても "test" は代入されずにどこかに消えてしまいます。変数を初期化してから使う癖は色々な場面で役に立ちます。
変数を使い終わった後に後始末をするのもいいことですが、この例のように null を代入することは危険です。foreach を抜けた後、$data という変数には $datas の最後の項目への参照が残ったままです(foreach のところが $data じゃなくて &$data だから)。
この状態で null を代入すると "何の日でしょうか?" のテキストが消えてしまいます。後始末をするなら null を代入するのではなく unset($data); で変数を未割り当て状態にしましょう。
これらの流れをまとめて、変数を使う前に unset($datas) した上で $datas = array(); をするのが変数の初期化として一番安全ではありますが、煩雑なコードになるし PHP の場合参照を使うと逆に速度が遅くなるケースもあるようなので参照の使用は必要最低限にして、参照を使ったあとは unset() するようにするといいかも知れません。

じゃあ次は外部からデータを渡してみましょう。
URL の最後を hello.php?name=(あなたの名前) にした上で以下のようにしてみます。
<?
echo $_REQUEST["name"] . "はどうしようもない愚か者";
?>
こうすれば「(あなたの名前)は天才」と表示されます。もう何でもありですね!
$_REQUEST は $_GET / $_POST / $_COOKIE の内容を全部含んだ配列で、何でも取れて便利ですがどれから取れるのかはわかりません。更に優先順位も設定によって変わるため、意図しない動きをする可能性があります。サボらずに $_GET などを使いましょう。

これらを上手く使いこなせばすぐ掲示板作れます! 頑張れ!
Clip to Evernote