Могу ли я динамически создать имя класса и затем использовать его для вызова статической функции этого класса в 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

Обновить

Опять же, ваш код …

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

… на самом деле должно работать, а также. Просто не забудьте установить $indicator переменная перед вызовом:

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

Выход:

I am the A-bar
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]