15

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

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

但是由于某种原因,当我使用该$this变量时,会出现解析错误。例如:

$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;

关于如何解决这个问题的任何想法?

4

3 回答 3

15

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

$this->myArray['instanceOfMyClass']->staticMethod();
于 2012-07-17T10:44:53.860 回答
6

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

要解决此问题,请使用 KISS 原则。

class RunCode
{
    private $myArray;

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

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

希望这可以帮助!

于 2012-07-17T10:05:53.680 回答
5

您将不得不使用临时变量分解一个衬里,例如

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

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

于 2012-07-17T10:07:56.030 回答