Ikat parameter kaedah tersuai pada atribut kelas
P粉364642019
P粉364642019 2023-07-28 17:29:03
0
1
547
<p>Dalam kelas, adakah terdapat cara untuk mengikat atribut kelas kepada parameter kaedah supaya pautan dua hala diwujudkan pada Ctrl+klik? </p> <pre class="brush:php;toolbar:false;">class Lampiran memanjangkan Repositori { Dokumen awam $dokumen; fungsi awam dariDocuments(boleh dipanggil $scope) { $this->scopeOnRepoProperty($scope, 'documents'); } } </pra> <p>Maksud saya, dalam kes ini, dokumen parameter kedua dalam kaedah scopeOnRepoProperty() harus merujuk kepada properti $documents. <br /><br />Konteks yang lebih luas ialah: <br />Masalahnya ialah sebahagian besar kod adalah sangat serupa, iaitu kebanyakan kaedah skopXXX/dariXXX melakukan sesuatu yang serupa, iaitu repositori sifat diluluskan sebagai parameter kepada kaedah. Sebagai contoh, dalam contoh di atas, $scope($this->documents) akan dilaksanakan selain itu, jika $this->documents tidak dimulakan, tika baharu akan dibuat. <br /><br />Jadi kodnya kelihatan seperti ini:</p><p><br /></p> <pre class="brush:php;toolbar:false;">fungsi awam daripadaDocuments(boleh dipanggil $scope) { if (!isset($this->documents)) { $this->documents = new Documents(); } $scope($this->documents); } </pra> <p>Saya mahu mengelak daripada menulis pernyataan if, mencipta objek baharu dan memanggil kaedah setiap kali, jadi saya fikir saya boleh melakukannya dengan kaedah yang akan menerima objek boleh dipanggil, nama sifat dan pantulan jenis nama kelas. </p><p>Kod berjalan dengan baik, tetapi malangnya disebabkan pendekatan ini saya kehilangan ikatan pada sifat ini. Dalam versi sebelumnya, ia adalah $this->documents, jadi pautan itu ada, tetapi itu tidak lagi berlaku. </p><p>Saya ingin tahu sama ada terdapat sebarang cara untuk mencapai ini. Ada idea? </p><p><br /></p>
P粉364642019
P粉364642019

membalas semua(1)
P粉135799949
    $scope($this->documents ??= new Documents());

Dengan cara ini rujukan merangkumi kedua-dua harta dan kelas yang anda mahu gunakan di sana. Ini biasanya lebih baik daripada menggunakan rentetan yang mewakili kedua-duanya (dan juga kehilangan rujukan kepada sifat konkrit dan nama kelas konkrit).

Apa yang anda lakukan di sini juga dikenali sebagai pemula malas. Masalahnya ialah kata kunci baharu digunakan dalam kelas, menjadikan kod sukar untuk diuji. Namun, ini adalah peningkatan berbanding bekerja dengan rentetan.

Anda juga mungkin berminat dengan @mixin baharu dalam PhpStorm


Ini mungkin membenarkan anda meninggalkan suntikan yang boleh dipanggil, tetapi saya tidak begitu jelas tentang apa sebenarnya yang anda capai dengan pendekatan ini, jadi ini hanyalah petua tambahan dan mungkin tidak sesuai dengan keperluan anda.

Rujukan:


Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan