PHPのHello World
第19回は、PHPのHello Worldです。PHPは、HTMLファイルに埋め込んでWebアプリケーションとして利用するのが普通ですが、コマンドライン上で実行することもできます。本稿では、コマンドラインから利用するPHPのHello Worldプログラムについて考えます。なお、PHPはバージョン5.2.6で動作確認しています。
echoを使う方法
リスト1は、echoを使ったHello Worldです。コマンドラインで実行するPHPスクリプトは、ほかのシェルスクリプト等と同様に、ファイルの1行目に「#!/usr/bin/php」と記述します。PHPのプログラムは、「<?php」と「?>>」で囲みます。ここで、ほかのスクリプト言語とは異なり、「#!/usr/bin/php」と「<?php」との間に空行を入れてはいけません。なぜなら、PHPでは、<?php ?>で囲まれていない部分の文字列は、基本的にはそのまま出力されてしまうため、「<?php」の前に空行があると、その空行も出力されてしまからです。
リスト1では、echoを使って文字列を出力しています。シェルスクリプトのechoとは異なり、改行コードは自分で付加する必要があります。文の終りのセミコロンも必要です。PHPの文字列は、Perl等と同様に、ダブルクォートで囲んだ場合は\nなどのエスケープ文字が解釈され、シングルクォートで囲んだ場合は解釈されずに文字通りの意味になります。
PHPスクリプトは、シェルスクリプトやPerlスクリプトなどと同様に、実行例1のようにchmodコマンドで実行属性を付ければ実行できます。
echoに複数の引数を付ける場合
PHPのechoには複数の引数をカンマで区切って付けることができます。ただし、シェルスクリプトのechoとは違って、引数と引数の間にスペースは付加されません。このことを考慮し、あえて複数の引数を使って記述するとリスト2のようになります。
printを使う方法
echoの代わりにprintを使う方法もあります(リスト3)。echoとprintの違いは、printが値を返すという点と、echoとは違ってprintでは複数の引数文字列をカンマで区切って指定することはできないことです。
printの値を利用している例
printは1の値(真の値)を返します。このため、値として評価する必要のある式の中にprintを記述することができます。これを利用した例が(リスト4)です。ここでは、2つのprintが&&演算子でつながれているため、結局両方のprintが実行されます。
文字列を連結してprintする
複数に分割された文字列をprintで出力する場合は、「.」演算子を使って文字列を連結し、printにはあくまで1つの引数として渡してやります(リスト5)。
printfを使う方法
PHPでもprintf()が使えます(リスト6)。printf()は関数なので、echoやprintとは違ってprintf(引数,...)の形で記述する必要があります。
sprintfを使う方法
sprintf()も使えます。sprintf()は戻り値として結果の文字列を返すため、それをあらためてechoなどを使って出力することができます(リスト7)。
print_rを使う方法
print_r()は、変数の内容を人間が見てわかりやすい形で表示する関数です。おもに、配列の中身を一覧表示するために用いられますが、単なる文字列を指定すれば、それがそのまま表示されます(リスト8)。
コマンドラインから直接実行
PHPのプログラムをスクリプトとして記述するのではなく、コマンドラインから直接実行するには、実行例2のように「-r」オプションを使います。コマンドラインに直接入力するプログラム部分は、シェルによって解釈されるのを防ぐため、全体をシングルクォートで囲みますが、では囲みません。なお、Perlとは違って、1文だけのプログラムでも、文末の「;」は省略できません。
変則的なPHPスクリプト
スクリプトの1行目の「#!」の行にPHPのプログラムを直接記述する方法で変則的なPHPスクリプトを作ることができます(リスト9)。
この1行は、シェルではなく、カーネルによって直接解釈されるため、phpの引数部分にはスペースを入れずに記述する必要があります。そこで、「-r」とechoの間も、echoと文字列の間もスペースを入れず、文字列の中にあるスペースは「\x20」で表現します。なお、コマンドライン上とは違って、プログラム部分をシングルクォートで囲んではいけません。
OSのコマンドを呼び出す方法
system()を使えば、PHPからOS上のコマンドを呼び出して実行することができます。リスト10では、OS上のechoコマンドを使って文字列を表示しています。
foreachのループを利用
少しプログラムらしく、foreachのループを使ってみましょう。リスト11は、配列$messageに文字列を1文字ずつ代入しておき、それをforeachを使って1文字ずつ取り出して出力する例です。
文字列をそのまま記述
PHPでは、で囲まれた部分以外の文字列は、基本的にはそのまま出力されます。ということは、わざわざPHPのプログラムを記述しなくても、文字列をそのまま記述するだけでHello Worldになります(リスト12)。
文字列の途中にechoを記述
直接記述した文字列の途中(行の途中でもよい)に、<?php ?>で囲んだプログラムを割り込ませば、それらは記述した順に出力されます。リスト13は、文字列の途中にechoを割り込ませ、結果的にHello Worldになるようにしています。