我希望将对象存储为类的属性。然后,我希望能够通过直接引用该属性来调用该类上的静态方法。
请考虑以下事项:
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((访问静态方法。