2015-02-21 2 views
0

У меня есть два класса с одинаковыми статическими методами, но каждый класс имеет различную реализацию методов. В моем коде я знаю, какой статический метод мне нужно вызвать, но тип класса определяется динамически. Что-то вроде этого:Могу ли я динамически создать имя класса, а затем использовать его для вызова статической функции этого класса в PHP?

class someClass_A { 
    public static function bar(){ 
     //some implementation; 
    } 
    public static function foo(){ 
     //some implementation; 
    } 
} 

class someClass_B { 
    public static function bar(){ 
     //different implementation; 
    } 
    public static function foo(){ 
     //different implementation; 
    } 
} 

Я пытаюсь использовать таким образом:

$class = 'someClass_' . $indicator; 
$bar = $class::bar(); 

Но это не работает. Могу ли я динамически создать имя класса, а затем использовать его для вызова статической функции этого класса?

ответ

0

Для этого вы можете использовать call_user_func_array.

class someClass_A { 
    public static function bar() { 
     return "I am the A-bar"; 
    } 
    public static function foo() { 
     return "I am the A-foo"; 
    } 
} 

class someClass_B { 
    public static function bar() { 
     return "I am the B-bar"; 
    } 
    public static function foo() { 
     return "I am the B-foo"; 
    } 
} 

$indicator = 'A'; 
$class = 'someClass_' . $indicator; 
$aBar = call_user_func_array(array($class, 'bar'), array()); 

$indicator = 'B'; 
$class = 'someClass_' . $indicator; 
$bFoo = call_user_func_array(array($class, 'foo'), array()); 

echo $aBar, PHP_EOL; 
echo $bFoo, PHP_EOL; 

Выход:

I am the A-bar 
I am the B-foo 

Update

Затем снова, ваш код ...

$class = 'someClass_' . $indicator; 
$aBar = $class::bar(); 

... на самом деле должны работать, как хорошо. Только не забудьте установить переменную $indicator перед вызовом:

$indicator = 'A'; 
$class = 'someClass_' . $indicator; 
$aBar = $class::bar(); 
echo $aBar, PHP_EOL; 

Выход:

I am the A-bar