Sistem pengendalian tutorial ini: Sistem Windows 10, PHP versi 8.1, komputer Dell G3.
Dalam PHP, Trait ialah mekanisme penggunaan semula kod yang boleh berkongsi kod antara berbilang kelas dan mengelakkan beberapa masalah yang disebabkan oleh berbilang warisan. Walau bagaimanapun, ramai pembangun PHP mungkin tertanya-tanya sama ada PHP Traits menyokong pembina dan cara menggunakan pembina dalam Traits.
Ringkasnya, PHP Traits tidak menyokong pembina.
Kerana Traits tidak boleh diwujudkan secara individu dan hanya boleh dirujuk oleh kelas. Oleh kerana Trait sendiri tidak mempunyai pembina, adalah mustahil untuk menentukan pembina dalam Trait.
Jadi bagaimana untuk melaksanakan fungsi seperti pembina dalam Trait? Malah, kesan yang sama boleh dicapai dengan menggunakan Traits dalam kelas. Secara khusus, anda boleh mentakrifkan pembina dalam kelas, dan menggunakan kaedah dalam Trait dalam pembina untuk memulakan sifat objek.
Sebagai contoh, kami mentakrifkan kelas Trait untuk melanjutkan kelas entiti asas:
trait EntityTrait { protected $id; public function setId($id) { $this->id = $id; } public function getId() { return $this->id; }}
Dalam kelas yang memanggil Trait, anda boleh mentakrifkan Trait pembina untuk memulakan atribut:
class Entity { use EntityTrait; public function __construct($id) { $this->setId($id); }}
Dengan cara ini, apabila menginstant objek Entiti, anda boleh menghantar nilai atribut id melalui pembina untuk memulakan sifat objek.
Perlu diambil perhatian bahawa jika kaedah dalam Trait dirujuk oleh berbilang Trait dan terdapat konflik penamaan antara kaedah dalam Trait ini, kaedah dalam Trait mesti ditunjukkan dalam kelas menggunakan Trait. Contohnya, jika terdapat dua Ciri seperti berikut:
trait Trait1 { public function initialize() { // Trait 1 implementation }}trait Trait2 { public function initialize() { // Trait 2 implementation }}
Dalam kelas menggunakan Trait, jika anda ingin memanggil kaedah permulaan dalam Trait1, anda boleh menggunakan kod berikut:
class MyClass { use Trait1, Trait2 { Trait1::initialize insteadof Trait2; }}
Dalam dengan cara ini, dalam MyClass Anda boleh memanggil kaedah dalam Trait1 dengan memanggil Trait1::initialize.
Atas ialah kandungan terperinci Adakah ciri php mempunyai pembina?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!