我有两个具有相同静态方法的类,但每个类都有不同的方法实现。在我的代码中,我知道需要调用哪个静态方法,但类类型是动态确定的。类似这样的东西:
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