簡體   English   中英

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();上失敗的原因$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM