PHPを始める前に知りたい、基本的な文法といくつかのタグ
はじめに
これから始めるPHP入門コラムでは、PHPを学ぶ人が、PHPで簡単なプログラムを書けるようになるまでに必要な知識とポイントをTips的に書いていきます。今後PHPのスキルを身につけて仕事に役立てたい、という方のために「PHP技術者認定初級試験」の出題範囲を意識しながら進めていきますので、ぜひ最後までお付き合いください。
今回のあらすじ
- PHPの文法
- 開始タグと終了タグ
- 関数・変数
- 大文字小文字
- ホワイトスペース
- コメント
PHPの文法
PHPを書くのは人間ですが、実行するのはコンピュータですよね。コンピュータがPHPを理解できるように、私たちは文法に従ってPHPを書く必要があります。文法と言っても外国語のように難しいものではありませんので、すぐに覚えることができますよ。
開始タグと終了タグ
PHPのコードは開始タグと終了タグの間に書きます(※)。それ以外の場所に書いたものは、PHPのコードとしてコンピュータに実行してもらえずに、書いたものがそのままになります。ウェブページならば、そのままHTMLとしてブラウザに判断されます。
※ファイルの最後に終了タグが来る場合だけは、その終了タグを省略することができます。省略する方が安全ですが、今はまだ理由が説明できませんので、そういうものだと思っていてください。
前回のコードをもう一度見てみましょう。
<ファイル>
php01-hello.php
<?php echo "やった、やった、やったよー!"; ?>
1行目の が開始タグで、3行目の
?>
が終了タグです。2行目の echo
は、その後ろに続く内容を出力します。文字を出力する場合は、ダブルクオテーション(")かシングルクオテーション(')で囲います。行末のセミコロン(;)は文の区切りを表します。この例では文は1つしかありませんが、一行に複数の文を書くこともできます。
<実行結果>
やった、やった、やったよー!
<画面表示>
http://(設定したURL)/php01-hello.php
やった、やった、やったよー!
画面でも一応表示されましたが、ブラウザで表示させるなら、正しくHTMLを書いた方がいいですね。HTMLタグを追加してみましょう。
(1)echo
でHTMLタグを出力する方法
<ファイル>
php02_html_1.php
<?php echo "<html>"; echo " <body>"; echo " <p>こんにちは!</p>"; echo " <p>私のブログへようこそ!</p>"; echo " </body>"; echo "</html>"; ?>
<実行結果>
<html> <body> <p>こんにちは!</p> <p>私のブログへようこそ!</p> </body></html>
読みにくいHTMLが出力されてしまいました。このままでもブラウザで表示できますが、もう少し読みやすいHTMLを出力したいですよね。実行結果にも改行を入れるには、echo
で改行自体も出力します。
(2) echo
でHTMLタグと改行を出力する方法
<ファイル>
<?php echo "<html>\n"; echo " <body>\n"; echo " <p>こんにちは!</p>\n"; echo " <p>私のブログへようこそ!</p>\n"; echo " </body>\n"; echo "</html>\n"; ?>
後日解説する予定ですが、\n
が改行です(表示フォントによって、最初の記号は円マークまたはバックスラッシュになります)。
<実行結果>
<html> <body> <p>こんにちは!</p> <p>私のブログへようこそ!</p> </body> </html>
今度は読みやすいHTMLが出力されました。
(3)HTMLタグをPHPコードの外に書く方法
開始タグと終了タグの外に書いたものはPHPとして実行されないので、以下のような書き方もできます。PHPコードの外側では、書いた文字列がそのまま出力されます。改行もそのまま反映されます。
<ファイル>
<html> <body> <p><?php echo "こんにちは!"; ?></p> <p><?php echo "私のブログへようこそ!"; ?></p> </body> </html>
(4)ヒアドキュメントを使う方法
echo
を何行にも渡って書く代わりに、ヒアドキュメントを使ってみましょう。<<
WELCOME;
までに書いた文字がそのまま echo
で出力されます(WELCOME;
は行頭に書かなくてはいけません)。スペースもタブも改行もすべて反映されます。WELCOME
以外にも、好きな文字を使うことができます。
<ファイル>
<?php echo <<<WELCOME <html> <body> <p>こんにちは!</p> <p>私のブログへようこそ!</p> </body> </html> WELCOME; ?>
(5)PHPを使わない方法
そもそもただの変化しない文字列なので、PHPを使わず直接書くことができます。そんなことを言っては元も子もありませんね(笑)
<html> <body> <p>こんにちは!</p> <p>私のブログへようこそ!</p> </body> </html>
関数・変数
せっかくPHPを使っているので、プログラムっぽいことをしてみましょう。
(1)ランダムな数値を出力する
アクセスするたびに結果が変わるように、ランダムな数値を出力してみます。
<ファイル>
<html> <body> <p>今日のラッキー指数は <?php echo rand(); ?> ですよ!</p> </body> </html>
<実行結果>
<html> <body> <p>今日のラッキー指数は 41522939 ですよ!</p> </body> </html>
rand()
は、ランダムな数値を作ってくれる関数です。関数とは、仕組みを知らなくても、ルールさえ知っていれば使うことができるツールです。もちろん自分で関数を作ることもできますし、PHPに元から用意されている便利な関数も相当数あります。それぞれの関数にはそれぞれの書き方のルールがありますので、ぜひマニュアルを活用してください。PHPのバージョンによって関数のルールが変わることもありますので、注意してくださいね。
PHPのマニュアルへはこちらから行けますが、関数を調べたい時は、http://php.net/rand のようなショートURLをブラウザに直接打ち込むこともできます。関数については、後日また詳しく解説します。
(2)閲覧者の情報を出力する
次は画面を見ている人の情報を出力してみましょう。ブラウザはサーバーにリクエストを送る際、普通の人が想像している以上の情報を一緒に送っています。
PHPはこのような情報をサーバーから取得し、変数という入れ物に格納しています。echo
では変数に格納された情報を出力することもできます。変数について詳しいことはまた後日取り上げますので、今回はだいたいの雰囲気を分かっていただければ大丈夫です。
<ファイル>
<?php echo "あなたが直前に見ていたサイトは「"; echo $_SERVER["HTTP_REFERER"]; echo "」です。\n"; echo "あなたがこの画面を見ているツールは「"; echo $_SERVER["HTTP_USER_AGENT"]; echo "」です。\n"; ?>
$_SERVER["HTTP_REFERER"]
と $_SERVER["HTTP_USER_AGENT"]
が変数です。この中に、直前に見ていたサイトの情報と、画面を見ているツール(ブラウザ)の情報がそれぞれ入っています。
<実行結果>
あなたが直前に見ていたサイトは「http://localhost/index.php 」です。 あなたがこの画面を見ているツールは「Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36」です。
実は、上の例は悪い例なのです。ブラウザから送られてきた情報は、そのまま使っては絶対にいけません。少し技術に詳しい人なら誰でも、これらの情報を悪いように書き換えることができるからです。例えば掲示板を想像してみてください。入力されたコメントの他に、その人が使っているブラウザの情報を自動で登録するとします。ブラウザから送られてきた情報をそのまま登録して表示すると、このようになりますね。
しかしもし、ブラウザの情報がいかがわしいサイトへのリンクにすり替えられていたらどうでしょう。ブラウザの情報の代わりにいかがわしいリンクが登録されてしまい、画面を見た別の人が、そのリンクをクリックしてしまうかもしれません!掲示板を作った人は悪いことをするつもりがないのに、悪意のある第三者に利用されてしまうのです。
このような場合にどうしたら良いかは、また後日取り上げたいと思います。
PHPに限ったことではありませんが、変なデータが送られてきた場合や、何かの不具合でデータが取れなかった場合などなど、通常は起こりえないことについても、すべてプログラミングしておく必要があるというのが、プログラミングの難しい部分です。しかも、そのような処理の方が、メインのプログラムよりも多くなることがほとんどなのです。単に動くものが作れることと、製品が作れることの差はこのようなところにあります。
大文字小文字
この後は少し簡単な話を続けて終わりたいと思います。echo
のようなキーワードも rand()
のような関数も、大文字と小文字を区別しません。以下の各行はどれも同じ処理になります。ですが、普通は一行目のように小文字で(マニュアルで指定されている通りに)書きます。
<ファイル>
<?php echo rand(); ECHO RAND(); Echo Rand(); EchO rANd(); ?>
ホワイトスペース
PHPのコードの体裁についてです。これまでの例のように、PHPのコードにはところどころにセミコロン(;)が書かれています。これは文の区切りを表します。
<?php echo "<p>"; echo "ようこそ!"; echo "</p>"; ?>
セミコロンや echo
の前後には、スペースやタブ、改行などの「ホワイトスペース」と呼ばれる文字があってもなくても構いません。普通は人間が読みやすいように、echo
の後ろにスペースを入れたり、一文ごとに改行しますが、このように詰めて書くこともできますし、
<?php echo "<p>"; echo "ようこそ!"; echo "</p>"; ?>
このように離して書くこともできます。
<?php echo "<p>"; echo "ようこそ!"; echo "</p>" ; ?>
コメント
プログラムは書いたら終わりではありません。レビューをしてもらったり、機能を追加したり、不具合を直したり、何度も読み直す機会があるでしょう。しかし、何千行もに膨れ上がったコードを読み直したり、直したい場所を探すのはとても大変です。そこで、今後プログラムのコードを読む人のためにも、どのような処理がそこに書いてあるのかについて、コメントを書いておくことが重要です。「今後プログラムのコードを読む人」というのは未来の自分も含みますよ!昔の自分が書いたコードでも、後から読むとちんぷんかんぷんになってしまうことは珍しくありません。
コメントの書き方は3通りあります。
(1)#を使う方法
#
記号から行の最後までがコメントになります。少し古い書き方です。
<?php # echo "この文は出力されません"; echo "この文は出力されます"; echo "行の途中からもコメントを書けます"; # これはコメントです ?>
(2) //を使う方法
//
記号から行の最後までがコメントになります。一般的な書き方です。
<?php // echo "この文は出力されません"; echo "この文は出力されます"; echo "行の途中からもコメントを書けます"; // これはコメントです ?>
(3)/* と */を使う方法
開始記号 /*
から終了記号 */
までがコメントになります。複数行に渡るコメントを書くときに使えます。
<?php /* echo "この文は出力されません"; echo "この文も出力されません"; */ echo "この文は出力されます"; echo "行の途中からもコメントを書けます"; /* これはコメントです */ ?>
ところで、コメントには何を書けばいいのでしょうか。例を見てみましょう。
悪い例(1)
<?php // 日付を表示する echo date("Y/m/d"); ?>
このコメントには、コードに書いてある以上の情報がありません。このような無駄なコメントならば、書かない方がいいでしょう。
良い例(1)
<?php // 今日の日付を表示する echo date("Y/m/d"); // 例:2014/07/01 ?>
このコメントは意味のあるコメントです。なぜなら、第三者でもコードが合っているかどうかを判断しやすいからです。
悪い例(2)
<?php // フラグが1なら if ($flag === 1) { // ○○する } // フラグが1でないなら else { // ××する } ?>
このコメントも悪い例です。「そんなのは見れば分かるよ!」というコメントしか書いてありません。
良い例(2)
<?php // 見ている人が管理者なら if ($flag === 1) { // ○○する } // 見ている人が管理者でないなら else { // ××する } ?>
このコメントならば、「このフラグには閲覧者が管理者かどうかの情報が入っている」ことと「ここでは管理者かどうかで処理が分岐する」という情報が得られます。
また、処理の大きな区切りの場所にも、区切りが分かりやすいコメントを書くといいでしょう。コードを書いた日付や、書いた人の名前を書いてもいいかもしれません。書き方は個人の好みや、開発チームのルールがあると思います。
<?php /* diary.php 日記関連の処理 作成日 2014/06/23 作成者 noda 更新日 2014/06/28 更新者 noda */ //-------------------------------------------------- // 最新の日記をデータベースから取得する //-------------------------------------------------- (長い処理ほにゃらら) //-------------------------------------------------- // 最新の日記への返信をデータベースから取得する //-------------------------------------------------- (長い処理ほにゃらら) ?>
余談ですが、プログラム中に書いたコメントを抜き出して、ドキュメントを作れるソフトウェアがいくつかあります。自分でドキュメントを書くのは大変なので、自動化してしまおうというソフトですね。それらのソフトウェアには、それぞれのコメントの書き方のルールがありますよ。
今回は以上です。
それではまた~。よい開発ライフを!