У меня есть два класса с одинаковыми статическими методами, но каждый класс имеет различную реализацию методов. В моем коде я знаю, какой статический метод мне нужно вызывать, но тип класса определяется динамически. Что-то вроде этого:
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();
Но это не работает. Могу ли я динамически создать имя класса и затем использовать его для вызова статической функции этого класса?
Вы можете использовать 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
Обновить
Опять же, ваш код …
$class = 'someClass_' . $indicator;
$aBar = $class::bar();
… на самом деле должно работать, а также. Просто не забудьте установить $indicator
переменная перед вызовом:
$indicator = 'A';
$class = 'someClass_' . $indicator;
$aBar = $class::bar();
echo $aBar, PHP_EOL;
Выход:
I am the A-bar
Других решений пока нет …