在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;
有关如何解决此问题的任何想法?
答案 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开发人员最近一直在改进,但仍有工作要做。