2012-07-15 4 views
2

일반적으로, 내가해야 할 것 :실행할 클래스를 지정하는 더 짧은 방법이 있습니까?

$str = "classname"; //classname is the name of a class 

switch($str) 
{ 
    case "class1": 
    class1::run(); break; 
    case "class2": 
    class2::run(); break; 
    case "class3": 
    class3::run(); break; 
    case "class4": 
    class4::run(); break; 
    case "classname": 
    classname::run(); break; 
    default: 
    die("Fatal error: no such class"); 
} 
//in my case, there are hundreds of cases and more being added 

한 줄에 아마,이를 단순화하는 방법이 있나요? 희망찬 생각?

$str::run() 

물론 $ str이 실제로 개체의 이름인지 확인하는 것은 필자의 책임입니다. 하지만 위와 같은 거대한리스트를 관리하는 것보다 관리가 훨씬 쉬울 것입니다.

이것이 가능합니까?

답변

3

예; 짐작 하시겠지만 $str::run(); 작품.

php> class A { public static function run() { echo "A!"; } } 

php> class B { public static function run() { echo "B!"; } } 

php> $n = "A"; 

php> $n::run(); 
A! 
php> $n = "B"; 

php> $n::run(); 
B! 
+0

홀수, 그것은 나를 위해 작동하지 않습니다 http://ideone.com/9iLvP 어쩌면 ideone는 PHP의 오래된 버전을 사용을? – dukevin

+0

버전에 따라 달라질 것 같습니다. PHP 5.3.8을 실행 중입니다. ideone은 5.2.12를 사용하는 것으로 보입니다. – icktoofay

+0

예. PHP 5.3.0에서 추가 된 것처럼 보입니다 : [ "$ foo :: myFunc()'(Etienne Kneuss)를 사용하여 정적 멤버의 동적 액세스 지원 추가"] (http://www.php.net/ ChangeLog-5.php # 5.3.0) – icktoofay

1

당신은 같은 것을 할 수있는 :

if (class_exists($str) && method_exists($str,'run')){ 
    {$tr}::run(); 
} 
관련 문제