- 締切済み
phpの対話型実行ツール?
関数の挙動を確認したいとき、対話型で実行できると便利だと思うのですが、そのようなツールはないでしょうか?あるいは、みなさんはどうやっていますか? 今のところ、echo '<?php echo str_replace("A","","ABC");?>' | php -q のようにしています。こういう単純なケースは、面倒なだけでまだ良いのですが、確認した値を使って次の動作をしたいときなど、どうしようもありません。 Ruby言語での対話型処理の例: $ irb irb(main):001:0> f=File.open('sample.txt','r') => #<File:sample.txt> irb(main):002:0> f.gets => "line 1 of file\n" irb(main):003:0>
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- wp_
- ベストアンサー率54% (132/242)
>少なくともphpで全体を書くか、あるいはそれでも無理か・・・ >phpソースを使ってphp本体と別のメインルーチンを作らないといけないのか・・・ 変数などのバッファはosの方で吸収してあげるしかないかもしれませんね。 phpコマンドで動かす以上はプロセスを一度区切らねばなりませんし・・ 動作をどこかで引っ掛ければ出来ないことも無いかもしれませんが、 phpにそんな機能があったかというとなかったような気もします。^^; メインプロセスを寝かせておいて別から引っ掛けて~とすれば出来ないことも無い気がしますが、やはりそういうツールは聞いたことないです。 ここは作るしか。(という無責任発言 ・・・使ったことないだけかもしれませんが^^; >質問に書いたとおり、書いたプログラムとテストというよりは、 >山ほどある関数の仕様の確認や、「この処理は、こういう方針で書けるのか」 >の裏取りを想定しています。 当方の場合はあまり使わない関数などに対してはphpのマニュアルを毎回読みますね。 strpos()とかmktime()とかin_array()とかよく引数の順番を忘れます^^; 「マニュアルに書いてあることが常に正」という前提の下であれば 裏取りは「実際に流す」より「PHPの仕様を確認する」というのが肝要かと思いますよ。 どうしても不安であればphpを構成する生コードを確認すればよいです。 確認方法としては環境によりますが、単体テストより前の製作段階でのテストは皆さんが言うとおりhttpを介して確認することが多いです。 バッチなどphpパーサが別のシステムでも、テスト用のルーチンをその場で即席で組んだりしますね。 実はそれらのゴミコード郡が結合テスト時に大活躍するのですが、それはノウハウの別の話ということで。 >初めての関数を使うときに、リファレンスを読んでの自分の理解が正しいかどうかって、 >実験して確かめたりはしないのでしょうか? リファレンスを読むってなんだろーうと思いましたがPHP機能のリファレンスとは別物ですな^^; 当方はもうお脳が駄目ですねorz ある程度の力を超えると「実験」をするということ自体しなくなる気がします。 関数を纏めて作ってテストして、駄目だったら「アー」と唸る。orz でも大抵は凡ミスなので一瞬で不具合は直る。 そうした方が早いというのを皆言わずとも理解している感があります。
- wp_
- ベストアンサー率54% (132/242)
自分で作りましょう・・・と言うのもアレですかね。 当方はそういうツールは聞いたことがないです。 // rubyは変なツールがあるんですね・・・ cli限定であれば普通にshなどを書けば良いかと。 使ってるシステムによって書きかたは変わりますが・・・ phpが吐いた変数の扱いや見栄えの問題など工夫の余地はありますが、 基本は以下の感じでしょう。 #!/usr/bin/sh echo "php> " read com while [ "$com" != "exit" ] do eval $com | php -q echo "php> " read com done もしかしたら誰かが既に作っているかもしれませんが、 当方はこういう作り方を行ったことがないし これからもないので知りません。 // 文法テストなら-lで事足りるし、単体テストするのに一行ごと検査しつつやらねばならないほど仕様策定を甘くしないし・・・
お礼
すみません。ありがとうございます。 一行完結のケースについては、シェル関数で、 pp() { echo "<?php echo $*;?>" | php -q; echo; } などと定義しています。 ただ、「確認した値を使って次の動作をしたいときなど」を考えると、少なくともphpで全体を書くか、あるいはそれでも無理か・・・phpソースを使ってphp本体と別のメインルーチンを作らないといけないのか・・・というところだと思います。 特殊なニーズとも思えないので、すでにあるかなと思ったのですが。 無いんですかねぇ。 >// 文法テストなら-lで事足りるし、単体テストするのに一行ごと検査しつつやらねばならないほど仕様策定を甘くしないし・・・ 質問に書いたとおり、書いたプログラムとテストというよりは、山ほどある関数の仕様の確認や、「この処理は、こういう方針で書けるのか」の裏取りを想定しています。 初めての関数を使うときに、リファレンスを読んでの自分の理解が正しいかどうかって、実験して確かめたりはしないのでしょうか?
- shimix
- ベストアンサー率54% (865/1590)
xamppをインストールしてますんで、そっちに置いて(http経由で)実行してますね。 #php4(まだ需要がある・・)/php5が切り替えられるし・・
- yambejp
- ベストアンサー率51% (3827/7415)
httpサーバーとphpがすでに入っているという前提ですよね? エディタで書いて、http経由で接続すればよいのでは? そのうち欲がでてくれば統合環境まで視野にいれられると思います
補足
>エディタで書いて、http経由で接続すればよいのでは? ファイルに書く方法だと、php -q < file でいいので、ことさらhttpサーバー経由にする理由がないです。 現状では、「確認した値を使って次の動作をしたいときなど」は、そのようにファイルに順次、次の処理を書き足しながら、必要なところにecho等を入れたりして繰り返し実行して対応していますが、何とも面倒。 >そのうち欲がでてくれば統合環境まで視野にいれられると思います これが知りたいです。あまり大げさでない物。WindowsでもLinuxでもいいです。
お礼
アドバイスありがとうございます。 ご推察の通り、「リファレンス」=「リファレンスマニュアル」です。すいません。 phpさわるのは年に数回くらいなので、基本構文は覚えていても、関数はどんどん忘れます(覚えるつもりもないですけど)。 >「実際に流す」より「PHPの仕様を確認する」というのが肝要かと思いますよ。 すべてのケースについてのサンプルコードが書いてある訳じゃないので、実験したいケースはあります。ちょっといま例は思い出せませんが。 結局、対話型実行環境はメジャーな範囲では存在しないと言うことでしょうかね。