PHPのnewで生成したインスタンスのメソッド呼び出しについて

追記(2010/04/18):
new演算子で生成したインスタンスを一旦変数に入れないといけないのは、どうやらPHP4など古いバージョンの場合らしい。PHP5では直接書けるぽい。


new演算子で生成したインスタンスは、一度変数に代入するなどしないと、メソッドが呼び出せない。
次の例はエラーになる(PHP 5.2.9-2)。

<?php
class Hoge{
    function __construct($a, $b){
        $this->num = $a * $b;
    }
    function show(){
        echo $this->num.'<br>';
    }
    private $num;
}
new Hoge(2, 3)->show();  // エラー!
?>

そこで、以下のようなメソッドを作成して生成→メソッド呼び出しを行えるようにした。

<?php
// クラスのインスタンスを作成
// 引数
//   $className         クラス名
//   $arg1, $arg2, ...  コンストラクタに渡す引数
// 戻り値
//   インスタンス
function makeInstance(){
	$args = func_get_args();
	$className = array_shift($args);
	return makeInstanceArgs($className, $args);
}
// コンストラクタへの引数の配列を指定して、クラスのインスタンスを作成
// 引数
//   $className  クラス名
//   $args       コンストラクタに渡す引数の配列
// 戻り値
//   インスタンス
function makeInstanceArgs($className, $args){
	if( !class_exists($className) ){
		throw new MyClassNotFoundError();
	}
	$ref = new ReflectionClass($className);
	return $ref->newInstanceArgs($args);
}
?>

使い方。

<?php
makeInstance('Hoge', 2, 3)->show();
または
makeInstanceArgs('Hoge', array(2, 3))->show();
?>