2010-01-17 5 views
3

클래스 내에서 정적 함수를 호출 할 때 변수를 클래스 이름으로 사용하는 데 문제가 있습니다. 다음과 같이 내 코드는 다음과 같습니다PHP : 클래스 인스턴스로 변수 이름

class test { 
    static function getInstance() { 
     return new test(); 
    } 
} 

$className = "test"; 
$test = $className::getInstance(); 

필자는 그래서 결코의 인스턴스를 생성하는 어떤 클래스 모르는 데이터베이스에서 오는 클래스의 이름과 같은 변수에 클래스 이름을 정의 할 수 있어요.

참고 : 현재 나는 다음과 같은 오류가 점점 오전 :

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM 

감사

+0

충분히 재미있게 PHP 5.3.1에서 코드가 작동하고 오류가 발생하지 않습니다. –

+1

가변 정적 클래스는 PHP 5.3 이상에서 사용할 수 있습니다. 더 낮은 값을 지정하려면 @hobodave에서 언급 한 call_user_func()/call_user_func_array()가 필요합니다. – Owen

답변

8
$test = call_user_func(array($className, 'getInstance')); 

참조 call_user_funccallbacks. 두 단지 문자열 값을 해석하는 것보다 나에게 많은 청소기 것

$className = 'Test'; 
$reflector = new ReflectionClass($className); 
$instance = $reflector->newInstance(); 
// or $instance = $reflector->newInstanceArgs([array]); 
// or $instance = $reflector->newInstanceWithoutConstructor(); 

:

$className = 'Test'; 
$reflector = new ReflectionClass($className); 
$method = $reflector->getMethod('getInstance'); 
$instance = $method->invoke(null); 

또는 :

+0

나를 때리십시오. 그게 바로 (그리고 오직?) 올바른 길입니다. –

+0

5.3까지, 즉 5.3+에서는 변수 클래스 이름을 사용할 수 있습니다. – StasM

0

당신은 reflection API을 사용할 수, 그건 당신이 그런 짓을 할 것 직접 클래스 이름으로 사용하거나 call_user_func 및 친구를 사용하십시오.