2008-12-05

php-shell が便利すぎてヤバい件

PHP には php -a というインタラクティブモードが一応あるんだけど、これがビックリするくらい使えない。いちばんビックリなのは

readline モジュールを読み込んでいないと <?php ?> を省略できない

ってこと。何それ? PHP を書くよって最初に明示してるのに <?php を省略できないとは。

これにビックリしてインタラクティブシェルを探してみたら、いくつか見つかった。中でもこれはすごい。

~jk php shell

  • PHP 5 以降
  • pear コマンドでインストールでき、irb のように実行ファイルとしてインストールされる
  • ビルド時の –with-readline ではなく、readline.so を追加する形で利用できる
  • つまり補完が効く
  • 関数の使い方をその場で調べられる

どうです。なかなかすごいっしょ。

例えばこんな風に使える。

$ php-shell.sh
PHP-Shell - Version 0.3.1, with readline() support
(c) 2006, Jan Kneschke <jan@kneschke.de>

>> use '?' to open the inline help

>> get_<TAB>
get_browser(                 get_headers(
get_cfg_var(                 get_html_translation_table(
get_class(                   get_include_path(
get_class_methods(           get_included_files(
get_class_vars(              get_loaded_extensions(
get_current_user(            get_magic_quotes_gpc(
get_declared_classes(        get_magic_quotes_runtime(
get_declared_interfaces(     get_meta_tags(
get_defined_constants(       get_object_vars(
get_defined_functions(       get_parent_class(
get_defined_vars(            get_required_files(
get_extension_funcs(         get_resource_type(
>> ? get_class()
'/**
* Retrieves the class name
*
* @params [object object]
* @return string
*/
'

どうですか。

※ ただ、PHP では readline モジュール自体がポピュラーでないのか、手元の環境ではシステム標準のパッケージだけで readline が有効な PHP を構築できたのは CentOS だけだった。Debian も MacPorts, Fink もダメだった。FreeBSD ではたぶんイケるけど試してない。

おまけ1(2月4日に気づいた)

>> ?
'Inline Help:
  >> quit
    leaves the shell
  >> ?
    show this help
  >> ? license
    show license of the shell
  >> :set <var>
    set a shell variable
  >> ? <var>
    show the DocComment a Class, Method or Function
    e.g.: ? fopen(), ? PHP_Shell, ? $__shell
  >> p <var>
    print the variable verbosly
  >> r <filename>
    load a php-script and execute each line
'

なんと、p も定義されている。irb 使いならこれを使わずに何を使うのだという話ですよ! まぁ中身はただの var_export() なんだけど。

おまけ2(同じく2月4日に気づいた)

こういう使い方がなかなか便利かも。

php -c INIFILE -q /PATH/TO/php-shell-cmd.php

デフォルトの php-shell.sh を起動するだけだと、例えば案件独自の設定などを反映させることができない。そこでこの方法。これならライブラリの読み込みもスムーズに行える。php-shell は組み込みの関数だけではなくて PHP で書かれたライブラリについても ? で phpdoc コメントを表示させることができるので、真面目に書かれたライブラリを使っているとものすごく便利に使える。

オレ? オレはもちろん大真面目に作っているから超便利に使っているよ!

About

例によって個人のなんちゃらです