2011-02-20 8 views
14

정적 메서드에 액세스하려고하지만 변수를 클래스 이름으로 사용하려고합니다. 이것이 가능한가? 나는 그것에 문제가있는 것 같다. 나는 이런 식으로 뭔가를 할 수 있도록하려면 :변수 클래스 이름 (PHP)을 사용하여 정적 메서드에 액세스

class foo { 
    public static function bar() { 
     echo 'test'; 
    } 
} 

$variable_class_name = 'foo'; 
$variable_class_name::bar(); 

그리고 나뿐만 아니라 유사한 사용하여 정적 변수를 할 수 있어야합니다.

+1

이 작품을 php 5.3.2에서 나에게 잘해라. –

+0

을 사용하여 5.2 믿습니다. 구문 분석 오류 : 예기치 않은 T_PAAMAYIM_NEKUDOTAYIM /some/path/application/models/lev_base_model.php의 35 행 " – dqhendricks

+0

실행중인 PHP 버전은 무엇입니까? 내가 아는 한 최근 버전 (5.2+, 이것이 유효 할 때 정확히 알 수는 없지만)에서 이것을 수행 할 수 있음을 알고 있습니다. – GordonM

답변

17

구문은 PHP 5.3 이상에서만 지원됩니다. 이전 버전에서는 구문을 이해할 수 없으므로 구문 분석 오류 (T_PAAMAYIM_NEKUDOTAYIM:: 연산자를 나타냄). 이전 버전의

당신이 그것을 클래스 이름과 메소드 이름을 포함하는 배열을 전달, call_user_func()을 시도 할 수 있습니다 :

$variable_class_name = 'foo'; 
call_user_func(array($variable_class_name, 'bar')); 
+0

right ... so 해결책이 있습니까? – dqhendricks

+0

@dqhendricks : 내 편집 – BoltClock

+0

보기 좋게 보입니다. 정적 속성과 비슷한 것이 있습니까? – dqhendricks

7

당신은 위의 PHP 5.1에 대한 reflection를 사용할 수 있습니다

class foo { 
    public static $bar = 'foobar'; 
} 

$class = 'foo'; 
$reflector = new ReflectionClass($class); 
echo $reflector->getStaticPropertyValue('bar'); 

> foobar 
+0

+1 좋은 일, 나는 반사에 대해 잊어 버릴 것입니다. – BoltClock

관련 문제