[英]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();
上失敗的原因$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() 訪問靜態方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.