我希望将对象存储为类的属性。然后,我希望能够通过直接引用该属性来调用该类的静态方法。
请考虑以下事项:
$results = $this->models->myModel::all();
PHP在$myModel = $this->models->myModel;
$results = $myModel::all();
如果我通过将class属性赋值给局部变量来修改它,那么事情就会按预期工作:
{{1}}
我想消除将class属性赋值给局部变量的需要。
这可能在PHP 5.3.x(我正在使用的版本)中实现,还是在以后的版本中实现?
解决方案应该是可读的,代码的目的不应该被混淆。
为清楚起见,这是对工作代码的显着简化。在我发布的示例代码中,将对象存储在类属性中的好处并不明显。
答案 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()访问静态方法。