国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

將自定義方法的參數(shù)綁定到類屬性上
P粉364642019
P粉364642019 2023-07-28 17:29:03
0
1
660
<p>在類內(nèi)部,有沒有辦法將類屬性綁定到方法參數(shù),以便在單擊Ctrl + 單擊時(shí)建立雙向鏈接?</p> <pre class="brush:php;toolbar:false;">class Attachments extends Repository { public Documents $documents; public function fromDocuments(callable $scope) { $this->scopeOnRepoProperty($scope, 'documents'); } } </pre> <p>我的意思是,在這種情況下,scopeOnRepoProperty() 方法中的第二個(gè)參數(shù) documents 應(yīng)該引用屬性 $documents。<br /><br />更廣泛的背景是:<br />問題是,代碼的很大一部分非常類似,即大多數(shù) scopeXXX/fromXXX 方法都會(huì)執(zhí)行類似的操作,即將屬性 repository 作為參數(shù)傳遞給方法。例如,在上面的示例中,會(huì)執(zhí)行 $scope($this->documents);此外,如果 $this->documents 沒有初始化,將創(chuàng)建一個(gè)新實(shí)例。<br /><br />所以代碼看起來是這樣的:</p><p><br /></p> <pre class="brush:php;toolbar:false;">public function fromDocuments(callable $scope) { if (!isset($this->documents)) { $this->documents = new Documents(); } $scope($this->documents); } </pre> <p>我想避免每次編寫 if 語句、創(chuàng)建新對(duì)象和調(diào)用方法,于是我想到可以使用一個(gè)方法來實(shí)現(xiàn),該方法將接受一個(gè)可調(diào)用對(duì)象、屬性名稱和類型反射類名。</p><p>代碼運(yùn)行良好,但不幸的是,由于這種方式,我失去了對(duì)這些屬性的綁定。在先前的版本中,是 $this->documents,因此鏈接是存在的,但現(xiàn)在不再存在。</p><p>我想知道是否有任何方法可以實(shí)現(xiàn)這一點(diǎn)。有什么想法嗎?</p><p><br /></p>
P粉364642019
P粉364642019

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

這樣引用既包括屬性,也包括您想在那里使用的類。這通常比使用表示兩者的字符串更好(并且還丟失了對(duì)具體屬性和具體類名的引用)。

您在這里所做的也被稱為延遲初始化。它的問題是在類中使用了 new 關(guān)鍵字,導(dǎo)致代碼難以測試。盡管如此,這仍然是對(duì)使用字符串的改進(jìn)。

您可能還對(duì) PhpStorm 中的新 @mixin


這可能讓您省略可調(diào)用對(duì)象的注入,但對(duì)于您通過此方法實(shí)現(xiàn)的具體目標(biāo)我并不完全清楚,所以這只是一個(gè)額外的提示,可能不符合您的需求。

參考資料:


最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板