將自訂方法的參數綁定到類別屬性上
P粉364642019
P粉364642019 2023-07-28 17:29:03
0
1
458

在類別內部,有沒有辦法將類別屬性綁定到方法參數,以便在點擊Ctrl 點擊時建立雙向連結?

class Attachments extends Repository { public Documents $documents; public function fromDocuments(callable $scope) { $this->scopeOnRepoProperty($scope, 'documents'); } } 

我的意思是,在這種情況下,scopeOnRepoProperty() 方法中的第二個參數 documents 應該引用屬性 $documents。

更廣泛的背景是:
問題是,程式碼的很大一部分非常類似,即大多數scopeXXX/fromXXX 方法都會執行類似的操作,即將屬性repository 會作為參數傳遞給方法。例如,在上面的範例中,會執行 $scope($this->documents);此外,如果 $this->documents 沒有初始化,將會建立一個新實例。

所以程式碼看起來是這樣的:


public function fromDocuments(callable $scope) { if (!isset($this->documents)) { $this->documents = new Documents(); } $scope($this->documents); } 

我想避免每次寫 if 語句、建立新物件和呼叫方法,所以我想到可以使用一個方法來實現,該方法將接受一個可呼叫物件、屬性名稱和類型反射類別名稱。

程式碼運作良好,但不幸的是,由於這種方式,我失去了對這些屬性的綁定。在先前的版本中,是 $this->documents,因此連結是存在的,但現在不再存在。

我想知道是否有任何方法可以實現這一點。有什麼想法嗎?


P粉364642019
P粉364642019

全部回覆 (1)
P粉135799949
$scope($this->documents ??= new Documents());

這樣引用既包括屬性,也包括您想在那裡使用的類別。這通常比使用表示兩者的字串更好(並且還丟失了對特定屬性和具體類別名稱的引用)。

您在這裡所做的也被稱為延遲初始化。它的問題是在類別中使用了 new 關鍵字,導致程式碼難以測試。儘管如此,這仍然是對使用字串的改進。

您可能也會對 PhpStorm 中的新 @mixin


這可能會讓您省略可呼叫物件的注入,但對於您透過此方法實現的具體目標我並不完全清楚,所以這只是一個額外的提示,可能不符合您的需求。

參考資料:


    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!