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目前不支持的一种安排。感谢您的澄清和相关文件的提示。