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


PHP, calling static method on class property

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

请考虑以下事项:

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(); 上失败

如果我通过将类属性分配给局部变量来修改它,事情会按预期工作:

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

我想消除将类属性分配给局部变量的需要。

这在 PHP 5.3.x(我正在使用的版本(或更高版本中是否可行?

解决方案应该是可读的,并且不应以其他方式混淆代码的目的。

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

语法会给你的错误是:

解析错误:

语法错误、意外的"::"(T_PAAMAYIM_NEKUDOTAYIM(


然而,由于统一变量语法RFC,它将在PHP 7中工作。所有以前的版本都需要中间变量。

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