从对象数组变量调用静态方法

时间:2012-07-17 09:05:17

标签: php arrays object static

在PHP中,您可以从对象实例(包含在数组中)中调用类的静态方法,如下所示:

$myArray['instanceOfMyClass']::staticMethod(); // works

但由于某些原因,当我使用$this变量时,我得到一个解析错误。 E.g:

$this->myArray['instanceOfMyClass']::staticMethod(); // PARSING ERROR

只是为了说明我的意思:

class MyClass{
    public static function staticMethod(){ echo "staticMethod called\n"; }
}

$myArray = array();
$myArray['instanceOfMyClass'] = new MyClass;
$myArray['instanceOfMyClass']::staticMethod(); // works

class RunCode
{
    private $myArray;

    public function __construct(){
        $this->myArray = array();
        $this->myArray['instanceOfMyClass'] = new MyClass;
        $this->myArray['instanceOfMyClass']::staticMethod(); // PARSING ERROR
    }
}

new RunCode;

有关如何解决此问题的任何想法?

3 个答案:

答案 0 :(得分:15)

你实际上可以使用“ - >”调用静态方法:

$this->myArray['instanceOfMyClass']->staticMethod();

答案 1 :(得分:6)

这是一个非常有趣的问题,它甚至可能是PHP本身的一个错误。

对于解决方法,请使用KISS原则。

class RunCode
{
    private $myArray;

    public function __construct(){
        $this->myArray = array();
        $this->myArray['instanceOfMyClass'] = new MyClass;

        $instance = $this->myArray['instanceOfMyClass']
        $instance::staticMethod();
    }
}

希望这有帮助!

答案 2 :(得分:5)

您必须使用临时变量分解一个班轮,例如

$inst = $this->myArray['instanceOfMyClass'];
$inst::staticMethod()

这是PHP的编译器不够聪明以理解嵌套表达式的许多情况之一。 PHP开发人员最近一直在改进,但仍有工作要做。