PHPに限らず、プログラミングしているとちょっとした動作確認したいなーって事が良くあります。メソッドの振る舞いとか正規表現の確認とかイロイロ。そのためだけにファイル作ったり書きこむの面倒なのでこういった簡単な動きを確認するのに便利な機能があります。もちろん他の言語でもあるのですがここでは省略します。
PHP ではコマンドライン引数の -a -r -R がそれに該当します。
-a
php -a を実行すると Interactive Shell と表示されます。この中ではPHPのコードを実行する事ができます。
[ryomatsu@vbox.ubuntu] $ php -a
Interactive shell
php > var_dump(date('c'));
string(25) "2012-06-11T23:15:55+09:00"
-r
php -r を実行すると
に書かれた文字をPHPのコードとして処理します。
[ryomatsu@vbox.ubuntu] $ php -r '$hoge="c";var_dump(date($hoge));'
string(25) "2012-06-11T23:42:28+09:00"
[ryomatsu@vbox.ubuntu] $
[ryomatsu@vbox.ubuntu] $ php -r "$hoge='c';var_dump(date($hoge));"
PHP Parse error: syntax error, unexpected '=' in Command line code on line 1
コマンドライン引数にコードを書いたらそれを実行します。変数扱う時は気を付けないと二つ目のような結果になります。エラーになる原因は
*sh が " 内の変数を展開するからなので以下のようなコードが動きます。
[ryomatsu@vbox.ubuntu] $ php -r "$hoge='c';var_dump(date(\$hoge));"
string(25) "2012-06-11T23:49:01+09:00"
[ryomatsu@vbox.ubuntu] $
[ryomatsu@vbox.ubuntu] $ hoge='"c"'
[ryomatsu@vbox.ubuntu] $ php -r "var_dump(date($hoge));"
string(25) "2012-06-11T23:49:08+09:00"
\でエスケープはともかく、2つ目は実用性は無いかな...?
-R
php -R を実行すると
に書かれたPHPのコードを、文字が入力される都度実行します。
以下のような挙動です。"hoge" が入力、string となってるのが出力です。
[ryomatsu@vbox.ubuntu] $ php -R "var_dump(substr(\$argn,\$argi-1,1));"
hoge
string(1) "h"
hoge
string(1) "o"
hoge
string(1) "g"
hoge
string(1) "e"
hoge
bool(false)
$argn, $argi はそれぞれ 入力された文字, 入力の行数です。
一つのコードに対して複数の入力がある場合に使います。自分は正規表現のチェックぐらいですね。
しかしPHPでワンライナーってあんまり見ないなぁ、その分野はPerlかなやっぱり。