cari

Rumah  >  Soal Jawab  >  teks badan

Ikat parameter kaedah tersuai pada atribut kelas

<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粉364642019P粉364642019514 hari yang lalu549

membalas semua(1)saya akan balas

  • P粉135799949

    P粉1357999492023-07-29 15:10:32

        $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:


    balas
    0
  • Batalbalas