- ポインタ、intptr_t、longの大きさが異なる環境でも使えるようになった
- IoからPHPの定数・変数・関数が利用できるようになった
- IoからPHPの"echo"が利用できるようになった
- IoStateクラスにメソッドを追加
IoからPHPの定数・変数・関数を使う
PHPオブジェクトのメソッドを介してアクセスします。
// 定数 $HOGE を取得 cHoge := PHP constant("HOGE") // グローバル変数 $hoge を取得 gHoge := PHP global("hoge") // ローカル変数 $hoge を取得 vHoge := PHP var("hoge") // 関数 hoge を引数なしで呼び出す rHoge0 := PHP call("hoge") // 関数 hoge を引数つきで呼び出す rHoge1 := PHP call("hoge", arg1, arg2) // call_user_func_array() 相当のものを独自に定義 PHP call_array := method(func, args, PHP performWithArgList("call", args clone prepend(func)) ) rHoge2 := PHP call_array("hoge", list(arg1, arg2))
Ioでecho
Ioのwrite, writeln, print, println等のメソッドは標準出力に直接書き出しますが、PHPでは出力がバッファリングされてから標準出力 (またはSAPIの出力ストリーム) に書き出されるため、Ioの出力とPHPの出力が同期しないことがあります。
それを避けるためにPHPの出力ストリームに文字列を書き込むメソッドを用意しました。
// "hoge" を出力 PHP echo("hoge") // 複数のメッセージにも対応 PHP echo("foo", "bar", "baz")
いちいち"PHP"と書くのが面倒な場合は"echo"だけで使えるようにしてみたり
Core echo := method(PHP performWithArgList("echo", call evalArgs)) Object echo := method(PHP echo(self))
Objectのメソッドをオーバーライドするのもありですね。
Object print = method(PHP echo(self)) Object println = method(PHP echo(self, PHP constant("PHP_EOL"))) Object write = method(PHP performWithArgList("echo", call evalArgs)) Object writeln = method( PHP performWithArgList("echo", call evalArgs) PHP echo(PHP constant("PHP_EOL")) )
追加されたメソッド
インスタンスメソッドとしてdoFile()をサポートしたのと、一時的なIoStateを使うスタティックメソッドを追加しました。
staticDoXxxはちょっと試してみるのには便利ですが、IoStateの初期化コストがそれなりにかかるので繰り返し使うにはおすすめしません。
mixed IoState::staticDoCString(string $code)
(スタティックメソッド)
$codeを実行する。IoStateは実行の度に初期化・開放される。
mixed IoState::staticDoFile(string $path)
(スタティックメソッド)
$pathで指定されたIoスクリプトを実行する。IoStateは実行の度に初期化・開放される。