2011-01-16 2 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); 
} 

코드의 마지막 줄은 완전히 worng입니다! 나는 단지 내가하고 싶은 것을 분명히하려고 노력하고있다.

새 개체를 차례로 초기화 할 때 $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

관련 문제