PHP,调用类属性上的静态方法
我希望将对象存储为类的属性。然后,我希望能够通过直接引用属性来调用该类上的静态方法 考虑以下几点:PHP,调用类属性上的静态方法,php,Php,我希望将对象存储为类的属性。然后,我希望能够通过直接引用属性来调用该类上的静态方法 考虑以下几点: class myModel { public static function all() { return 1; } } class myClass { public $models; public function __construct() { $this->models->myModel = ne
class myModel {
public static function all()
{
return 1;
}
}
class myClass {
public $models;
public function __construct()
{
$this->models->myModel = new myModel;
$results = $this->models->myModel::all();
}
}
$result = new myClass;
PHP在$results=$this->models->myModel::all()上失败代码>
如果我通过将class属性指定给局部变量来修改此属性,则一切都会按预期进行:
$myModel = $this->models->myModel;
$results = $myModel::all();
我想消除将class属性赋值给局部变量的需要
这在PHP5.3.x(我正在使用的版本)或者更高版本中可能吗
解决方案应该是可读的,代码的目的不应该被混淆
为了清楚起见,这是对工作代码的一种戏剧性的简化。在我发布的示例代码中,将对象存储在类属性中的好处并不明显。它在$results=$this->models->myModel::all()上失败的原因代码>是因为myClass中的公共属性$models没有属性myModel(因为它从一开始就是空的),您可以通过->myModel访问该属性。由于您将myModel的一个实例存储在$models(不存在的实例myModel)中,因此可能没有正确创建它。您需要修复这个$this->models->myModel=newmymodel
到$this->models=newmymodel代码>也是如此,因为$models不是具有属性myModel的对象,但您尝试访问ist。然后,$this->models直接指向对象myModel,您可以通过$this->models::all()访问静态方法。语法将给您带来的错误是:
分析错误:语法错误,意外的“:”(T_PAAMAYIM_NEKUDOTAYIM)
不过,多亏了。所有以前的版本都需要中间变量。您得到的是解析错误:语法错误,意外的“:”(T_PAAMAYIM_NEKUDOTAYIM)?类属性按公布的方式存在。我可以把它分配给一个局部变量,我怀疑这是PHP目前不支持的一种安排。感谢您的澄清和相关文件的提示。