0

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

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();

但它不起作用。我可以动态创建一个类名,然后用它来调用该类的静态函数吗?

4

1 回答 1

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
于 2015-02-21T08:43:15.840 回答