◆ php -a は Linux だと基本は REPL になります
◆ タブ補完やエラーで終了するので長いコードを貼り付けると運が悪ければ悲惨な目にあいます
◆ Windows だと REPL じゃなくて <?php も含めて書いて 最後に EOF 挿入で実行できます 

PHP でインタプリタで実行します

php -a だと REPL で実行されて便利ですよね
Linuxでは。

Windows だと REPL じゃなくて ファイルの中身を手入力して最後にまとめて実行 ってすることになります

実際は OS 依存じゃなくて コンパイル時のオプションらしく 配布されてるものだと Windows では REPL できなくて Linux だとできるようにされてるだけみたいです
自分でビルドするなら好きな方にできるということですね

Windows での php -a のつかいかた

好きに入力して Ctrl-Z を押して Enter を押します
Ctrl-Z を押すと ^Z と表示されます
^Z が行の最初に来ていると そこまでに書かれた文字列を PHP のコードとして実行します
^Z と表示されるからといって 自分で ^ と Z を打っても意味が無いです
D:\Downloads>php-5.6.8-Win32-VC11-x86\php.exe -a
Interactive mode enabled

echo 1;
^Z
echo 1;

<?php がないので そのまま出力されています
D:\Downloads>php-5.6.8-Win32-VC11-x86\php.exe -a
Interactive mode enabled

<?php
echo 1;
^Z
1

<?php
があるとちゃんと実行されてます

実は Windows での動きは -a なくても一緒です
D:\Downloads>php-5.6.8-Win32-VC11-x86\php.exe
<?php
echo 1+2+3+4+5;
^Z
15
php をオプションなしで実行したときでも同じように使えてますね
「Interactive mode enabled」と表示されてないのでどうなってるのかわかりづらいですけど


ところで ^Z は 「EOF」 のことです
Linux だと Ctrl-D で入力できるあれです
ファイル終端を表す特殊な文字です

なので そこで終わりと判断して PHP が実行されるということのようです


ファイルに保存して 実行すればいいように思えますけど 一時的なファイル作りたくなくて エディタで未保存のメモリ上にだけある状態のコードを動かしたいってときには使ってます

Linux の -a

Linux だと REPL で使えるので便利なのは便利なのですけど 使いづらいところもあります

まず セミコロンが必須です
言語として 必要なのでわかるといえばわかるんですけど REPL なら省略させてほしいです
動かないなー? と思ったらセミコロン抜けっていうのが多いです

よく考えたら セミコロンいる言語の REPL って PHP 以外に使ったことなかったかも……


次は ほとんどの REPL に言えるんですけど タブキーによる補完のせいでタブのあるコードをコピペすると悲惨なことになることですね

PHP の標準 REPL はエラーが出るとそこで終了してしまいます
タブ補完で勝手に入力された謎の文字があるせいでシンタックスエラーとなって終了したあとに 残りのコードが shell 上で実行されます
そこでも タブで補完が入るのでそれはもう悲惨なことになります

謎のファイルが山のようにできてることなんてよくありますし ひどい時はファイルが行方不明になってたりします
mv だといいものの rm が実行されていたらと思うと……

さらに cd とか / が混ざってたら どこのフォルダに影響があったのかすらわからなくなります
私は今まで cd が起きてたことはなかったですが 可能性はあるので途中終了の可能性がある REPL にコピペは怖すぎです
(ないと思ってるだけで 実は長いコードの間で cd でどこかにいって rm して また cd で元の場所に戻ってたなんてことのある可能性も0じゃないですけど)

途中で終了する可能性のある REPL とタブ補完が組み合わさると怖いことがわかったと思います


こういうことがあるので php -a はあまりいいとは言い難いこともあります

そこで 別の REPL を使ってみます psysh が個人的におすすめです

●最後のセミコロンは省略可能!
(関数定義の内側ではできません)

●タブを押しても普通にタブが入力されるのでコピペしても安心!
補完で変な入力はされないですが コード自体にエラーあるとさすがに落ちるときはあります
ですが パースエラーや warning 程度では大丈夫で一部の Fatal Error 以外では終了しないです

一部ってこういうの
>>> ~[]

Fatal error: Unsupported operand types in
phar://D:/Downloads/psysh/src/Psy/ExecutionLoop/Loop.php(76) :
eval()'d code on line 1

完全に安全にしたいなら REPL じゃなくて Windows のモードがいいかもしれないです
Linux (-a が REPL) でも -a なしでただの php だけだと Windows のように <?php からコピペして EOF まで入力してからの実行になります
Linux では EOF は Ctrl-D で Windows と違って Enter キーは押さなくていいです