PHP,在类属性上调用静态方法

时间:2015-10-18 13:25:55

标签: php

我希望将对象存储为类的属性。然后,我希望能够通过直接引用该属性来调用该类的静态方法。

请考虑以下事项:

$results = $this->models->myModel::all();

PHP在$myModel = $this->models->myModel; $results = $myModel::all();

上失败

如果我通过将class属性赋值给局部变量来修改它,那么事情就会按预期工作:

{{1}}

我想消除将class属性赋值给局部变量的需要。

这可能在PHP 5.3.x(我正在使用的版本)中实现,还是在以后的版本中实现?

解决方案应该是可读的,代码的目的不应该被混淆。

为清楚起见,这是对工作代码的显着简化。在我发布的示例代码中,将对象存储在类属性中的好处并不明显。

2 个答案:

答案 0 :(得分:5)

语法给出的错误是:

  

解析错误:语法错误,意外' ::' (T_PAAMAYIM_NEKUDOTAYIM)

然而,由于Uniform Variable Syntax RFC,它将在PHP 7中运行。所有以前的版本都需要中间变量。

答案 1 :(得分:0)

它在$results = $this->models->myModel::all();上失败的原因是因为myClass的公共属性$ models没有属性myModel(因为它从开始就是NULL),你尝试通过 - > myModel访问它。当您在$ models非现有实例myModel中存储myModel实例时,可能无法正确创建它。您还需要将此$this->models->myModel = new myModel;修复为$this->models = new myModel;,因为$ models不是具有属性myModel的对象,但您尝试访问ist。然后,$ this->模型直接指向对象myModel,您可以通过$ this-> models :: all()访问静态方法。