Rumah >pembangunan bahagian belakang >masalah PHP >Cara menggunakan mod sifat atau gabungan untuk melaksanakan berbilang warisan dalam PHP
Warisan kelas PHP hanya boleh menjadi warisan tunggal, bukan warisan berbilang Jika anda ingin melaksanakan warisan berbilang, anda boleh menggunakan kaedah antara muka untuk melaksanakan warisan berbilang Walau bagaimanapun, jika anda tidak mahu menggunakan kaedah antara muka warisan berbilang, anda boleh mempertimbangkan untuk menggunakan Ciri dilaksanakan, dan sudah tentu, ia juga boleh dilaksanakan menggunakan corak gubahan.
Trait ialah kaedah penggunaan semula kod baharu dalam PHP 5.4 Trait ialah mekanisme penggunaan semula kod yang disediakan untuk bahasa warisan tunggal seperti PHP. Ciri-ciri direka untuk mengurangkan batasan bahasa warisan tunggal dan membenarkan pembangun menggunakan semula kaedah secara bebas dalam kelas bebas dalam hierarki yang berbeza. Semantik komposisi Trait dan Kelas mentakrifkan cara untuk mengurangkan kerumitan dan mengelakkan masalah biasa yang berkaitan dengan warisan berbilang tradisional dan kelas Mixin.
Sifat adalah serupa dengan Kelas, tetapi hanya direka bentuk untuk menggabungkan fungsi dengan cara yang terperinci dan konsisten. Tidak boleh diwujudkan melalui sifat itu sendiri. Ia menambah gabungan ciri mendatar kepada warisan tradisional, iaitu, tidak ada keperluan untuk warisan antara beberapa Kelas dalam aplikasi.
Biasanya gunakan kata kunci penggunaan dalam kelas untuk mengisytiharkan nama Trait untuk digabungkan, dan pengisytiharan Trait tertentu menggunakan kata kunci trait, dan Trait tidak boleh digunakan secara langsung.
Kod adalah seperti berikut:
<?php /** * Traits可以多重继承,可以看做是一种加强型的接口 */ trait Hello { public function sayHello() { echo 'Hello '; } public function aaa() { echo 'AAA'; } } trait World { public function sayWorld() { echo 'World'; } } class MyHelloWorld { use Hello, World; public function sayExclamationMark() { echo '!'; } // 会覆盖掉Hello中的aaa方法 public function aaa() { echo 'AAAAA'; } } $obj = new MyHelloWorld(); $obj->sayHello(); $obj->sayWorld(); $obj->sayExclamationMark(); $obj->aaa(); // 输出: // Hello World!AAAAA
Kod menggunakan dua sifat untuk melaksanakan warisan berbilang.
Nota: Kaedah yang sama tidak boleh muncul dalam dua sifat Jika terdapat kaedah dengan nama yang sama, ralat maut akan berlaku.
Nota: Terdapat juga kaedah aaa dalam kelas MyHelloWorld, yang akan mengatasi kaedah aaa dalam ciri Hello.
Kod di atas juga boleh dilaksanakan melalui mod gabungan Kod adalah seperti berikut:
<?php /** * 使用组合的方式也可以达到 1_12_trait.php 的效果 */ class Hello2 { public function sayHello() { echo 'Hello '; } public function aaa() { echo 'AAA'; } } class World2 { public function sayWorld() { echo 'World'; } public function aaa() { echo 'AAAA'; } } class MyHelloWorld2 { public $obj = []; public function __construct() { $this->obj['Hello2'] = new Hello2(); $this->obj['World2'] = new World2(); } public function sayExclamationMark() { echo '!'; } public function __call($name, $arguments) { foreach ($this->obj as $value) { if (method_exists($value, $name)) { return $value->$name(); // 也可以用 return call_user_func([$value, $name]); } } if (!method_exists($this->obj['Hello2'], $name) && !method_exists($this->obj['World2'], $name)) { echo "\r\n不存在此方法"; } return true; } // 会覆盖其他类的aaa方法 public function aaa() { echo 'AAAAA'; } } $obj = new MyHelloWorld2(); $obj->sayHello(); $obj->sayWorld(); $obj->saywhat(); $obj->aaa(); $obj->sayExclamationMark(); // 输出: // Hello World!AAAAA
Jelas sekali, jika dilaksanakan melalui ciri, jumlah kod akan menjadi lebih sedikit dan kebolehbacaan akan menjadi lebih tinggi.
Pembelajaran yang disyorkan: tutorial video php
Atas ialah kandungan terperinci Cara menggunakan mod sifat atau gabungan untuk melaksanakan berbilang warisan dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!