PHP で遊ぼう(5) – PHPの書き方 –
何から伝えれば、いいのか。 というわけでめでたく5回目。 🙂
プログラム言語といえども、それは人間が使う言語のひとつ。 しゃべれるようになるには、まずはいくつかの基本を押さえる必要があります。 プログラム言語に備わる機能は全て目的があって実装されているものですが、何に使うのかを説明する前に、いくつかは動作だけを先にお伝えする必要があります。 なぜなら、そうじゃないとサンプルが実行できないから。 ちょっとジレンマですが、少々ご辛抱ください。 🙂
目的がないとプログラム言語なんちゅーものは使わないものです。 というわけで、まずは目標をひとつ!。
ここのブログを読んでくださっている方は WordPress を使われている方が多いので、次の次の回で WP のプラグインをひとつつくることにします。 使うのは変数と if 構文といくつかの組み込み関数。 まじですか、と思う方もいるかもしれませんが、プログラムは単純な動作しかしなくても、ブログのようにたくさんの入力データがあると、実はそれだけでもプログラムは面白いものに変わります。 お楽しみに…。 (endunham さん、naoki さんコメントありがとうございました!)
さて前回は、PHP はファイルの先頭から順に実行が始まって、ファイルの終端もしくは明示的な構文の指定で、プログラムが終わるという説明でした。 いろいろすっとばして言うと、拡張子 .php のテキストファイルを適切に設定された Web サーバ上におき、そのファイルにブラウザからアクセスするとテキストファイルに書かれた PHP が動作し最後まで行くと終了します。
この辺が、Apache とか mod_php とか CGI とかその手の世界の話になりますが、まぁとりあえずインフラのお話はおいおいと。 どうせ、画面からのユーザ操作受けのところでいやというほどでてきます。
プログラム言語の世界では、とりあえずまずは hello world というプログラムを書くのが習わしになっています。 hello world って画面にだすだけのプログラムなんですが、この慣習の奥底には、画面さえでちゃえば、あとはなんとなかるぜというハッカー的な要素が潜んでいます。
たとえば、Java (Script じゃないよ)なんかだと、
- public class HelloWorld {
- static final String HELLOWORLD = "Hello World.";
- HelloWorld() {
- System.out.println(HELLOWORLD);
- }
- static public void main(String args[]) {
- new HelloWorld();
- }
- }
こんなかんじかなー。 いや、もっとやれば getHello() とかつくるべきなんだろうけど、まぁまぁとどのつまり非常に複雑です。 Java などのオブジェクト指向プログラムとよばれる言語はこのようにとっかかりが非常に悪いのです。 この hello world が1行ずつ正しく説明できたらほぼ言語仕様が分かっていることになります。(System オブジェクトの PrintStream 型の out スタティックフィールドの println メソッドを呼ぶ、、とか冷静に考えるとここだけでも高度ですよね)
じゃー、PHP で画面に hello world とだすのは非常に簡単で、
- echo "Hello World.";
となります。 これならなんとなくぱっとみすぐ分かります。 このようにスクリプト系言語は非常にとっつきやすいようにできています。
ではひとつずつこのプログラムの要素を見ていきます。 <?php、?>、echo が目立ちますが実は重要なのは「;」と改行とスペース・タブです。
PHP は <?php から ?> でくくられた部分をプログラムとして認識し評価実行します。 それ以外の場合は、”そのまま出力”します。 ここは後述。 echo というのは後ろに指定された文字等をこれまた画面に出力します。
では、「;」はなにかというと PHP にそれが1文であるということを知らせるものです。 二つ画面に hello world を出力する場合は、
- echo "Hello World.";
- echo "Hello World.";
となります。 文の区切りとしては改行は特に意味を持ちません。 あくまで文は ; で区切ります。 改行は人間がみやすいように挿入するだけですので、次のようにしてもまったく問題ありません。
- echo "Hello World."; echo "Hello World.";
スペース・タブに関しては何文字いれても PHP は1区切りとなります。 逆に言うと次はだめです。 エラーになります。(たぶん)
- echo "Hello World."; echo "Hello World.";
<?php と echo がくっついちゃっているので解析できないわけです。 次は OK です。
- echo "Hello World."; echo "Hello World.";
この辺は人の書き方の癖になりますね。 ちなみに複数人の大規模開発なのではコーディングスタイルといった文書でこれらを統一するようにしたりします。
さてさて、この hello world を helloworld.php とかってして Web サーバに置いてアクセスするとブラウザ上にはめでたく Hello World と出力されるわけですが、実はこの Hello World は真実ではありません。
なぜならばブラウザは HTML を表示するもの。 そして基本的に PHP は HTML を送るようにデフォルトで設定されていますので、内部的にブラウザに HTML をおくるよーといいつつ、<html> タグすらない うそ HTML を送っていることになります。
タグを全部ふくめて、echo してもいいわけなんですが、PHP は上で書いたように <?php ~ ?> でくくられていないものはそのまんま出力するという機能があります。 これを使えば、
- <html>
- <body>
- <p>echo "Hello World1."; </p>
- <p>echo "Hello World2."; </p>
- </body>
- </html>
とすることができます。 <?php ~ ?> 部分が PHP の echo による出力とおきかえられるイメージです。 これが真の Web/PHP の Hello World かもしれません。 出力された画面を、ブラウザのソース表示で確認すると分かりやすいでしょう。
…でお気づきの通り、
- <html>
- <body>
- <p>Hello World1.</p>
- <p>Hello World2.</p>
- </body>
- </html>
という hellowordl.php でもまったく同じ結果を得ることができます。。
これでは PHP 使わなくてもいーじゃんって話ですが、その通りで echo は固定で文字をだしている文にはその実装された目的を達成することができません。 echo はプログラムで処理した結果を出力するもので、実行によって値が変わる場合にその真意を発揮します。
というわけで、やっぱりとっかかりはツマランですね。(笑) でも PHP の場合これでおしまいです。 次は変数と if を使って遊んでみましょう。 ちょっとは面白いかもしれません。 🙂