2011-01-16 12 views
3

私は、PHPの__call()という魔方法を使用して呼び出されるメソッドを持つクラスを作成しようとしています。このマジックメソッドは、次のように別のオブジェクトを初期化します:未知の引数を持つオブジェクトを初期化する方法は?

public function __call($function, $arguments) { 

    /* Only allow function beginning with 'add' */ 
    if (! preg_match('/^add/', $function)) { 
     trigger_error('Call to undefined method ' . __CLASS__ . '::' . $function, E_USER_ERROR); 
    } 

    $class = 'NamodgField_' . substr($function, 3); /* Ex: $function = addTextField() => $class = NamodgField_TextField */ 

    /* This doesn't work! Because $class is not an object yet */ 
    call_user_func_array(array(new $class, '__construct'), $arguments); 
} 

このコードの最後の行は完全に悪いです!私は自分がしたいことを明確にしようとしています。

新しいオブジェクトを次々に初期化するときに、$argumentsを渡すことができるように、各子クラスが必要な引数を定義できるようにします。

私はeval()を使って解決策を考えましたが、本当に好きではありません。

すべてのアイデア?

答えて

3
$class = new ReflectionClass('a'); 
$object = $class->newInstanceArgs(array(1, 2, 3)); 

class a 
{ 
    public function __construct($b, $c, $d) 
    { 
     var_dump($b, $c, $d); 
    } 
} 
+0

はい、それでした。ありがとうございました^^ – Maher4Ever

関連する問題