Panduan untuk menggunakan ciri -ciri dalam Php 5.4
mata teras
insteadof
. as
Ciri -ciri
Penampilan Trait
sifat adalah serupa dengan kelas abstrak yang tidak dapat ditandakan secara berasingan (walaupun lebih kerap dibandingkan dengan antara muka). Dokumen PHP mentakrifkan ciri -ciri seperti berikut: & gt; Tujuan ciri -ciri adalah untuk mengurangkan beberapa batasan warisan tunggal dengan membolehkan pemaju untuk menggunakan semula kaedah yang ditetapkan secara bebas dalam beberapa kelas bebas (yang ada dalam hierarki warisan kelas yang berbeza).mari kita pertimbangkan contoh ini:
<?php class DbReader extends Mysqli { } class FileReader extends SplFileObject { }
<?php trait Singleton { private static $instance; public static function getInstance() { if (!(self::$instance instanceof self)) { self::$instance = new self; } return self::$instance; } } class DbReader extends ArrayObject { use Singleton; } class FileReader { use Singleton; }
yang menggunakan sifat ini untuk membuat objek kelas (jika belum dicipta) dan mengembalikannya. Mari cuba buat objek kelas ini menggunakan kaedah getInstance()
. getInstance()
<?php class DbReader extends Mysqli { } class FileReader extends SplFileObject { }
kita dapat melihat bahawa $a
adalah objek DbReader
dan $b
adalah objek FileReader
, tetapi kedua -duanya kini muncul sebagai singleton. Kaedah dari Singleton telah disuntik secara mendatar ke dalam kelas yang menggunakannya. Ciri -ciri tidak mengenakan apa -apa semantik tambahan di kelas. Untuk beberapa tahap, anda boleh memikirkannya sebagai mekanisme salinan yang dibantu oleh pengkompil di mana kaedah Trait disalin ke dalam kelas komposit. Jika kita hanya subclass $instance
dari kelas induk dengan atribut swasta, atribut tidak akan dipaparkan dalam pembuangan DbReader
. Walau bagaimanapun, dengan ciri -ciri, ada di sana! ReflectionClass::export()
<?php trait Singleton { private static $instance; public static function getInstance() { if (!(self::$instance instanceof self)) { self::$instance = new self; } return self::$instance; } } class DbReader extends ArrayObject { use Singleton; } class FileReader { use Singleton; }
Ciri -ciri berganda
Setakat ini, kita hanya menggunakan satu sifat dalam satu kelas, tetapi dalam beberapa kes kita mungkin perlu menggabungkan fungsi pelbagai ciri.
<?php $a = DbReader::getInstance(); $b = FileReader::getInstance(); var_dump($a); //object(DbReader) var_dump($b); //object(FileReader)
dan Hello
. Sifat hanya boleh mengatakan "hello", World
sifat hanya boleh mengatakan "dunia". Dalam kelas Hello
, kami menggunakan World
dan MyWorld
supaya objek Hello
akan mempunyai kaedah dari kedua -dua ciri ini dan akan dapat mengatakan "Hello World". World
Sifat -sifat yang terdiri daripada ciri -ciri MyWorld
Apabila aplikasi berkembang, kami mungkin akan mempunyai satu set ciri yang digunakan dalam kelas yang berbeza. Php 5.4 membolehkan kita mempunyai ciri -ciri yang terdiri daripada ciri -ciri lain supaya kita hanya perlu memasukkan pelbagai ciri dalam satu ciri, bukannya pelbagai ciri dalam semua kelas ini. Ini membolehkan kita menulis semula contoh sebelumnya seperti berikut:
di sini, kami mencipta sifat, menggunakan ciri -ciri
dan<code>Class [ class FileReader ] { @@ /home/shameer/workplace/php54/index.php 19-22 - Constants [0] { } - Static properties [1] { Property [ private static $_instance ] } - Static methods [1] { Method [ static public method instance ] { @@ /home/shameer/workplace/php54/index.php 6 - 11 } } - Properties [0] { } - Methods [0] { } }</code>
. Oleh kerana sifat HelloWorld
mempunyai kaedah dari dua ciri lain, ia sama seperti jika kita memasukkan kedua -dua ciri ini di dalam kelas. Hello
World
MyWorld
(Kandungan berikut akan diringkaskan secara ringkas kerana batasan ruang dan maklumat teras yang disimpan) HelloWorld
Kaedah Trait mempunyai keutamaan yang lebih tinggi daripada kaedah kelas induk, dan kaedah kelas mempunyai keutamaan yang lebih tinggi daripada kaedah sifat.
Resolusi Konflik dan alias:Gunakan untuk memilih kaedah sifat yang hendak digunakan, dan gunakan untuk membuat kaedah alias untuk mengelakkan konflik.
Refleksi: insteadof
as
Menyediakan kaedah untuk mendapatkan maklumat ciri -ciri dalam kelas, seperti
, , dan . ReflectionClass
Ciri -ciri lain: getTraits()
Ciri -ciri boleh mengakses sifat -sifat peribadi dan kaedah kelas gabungan, dan sebaliknya; getTraitNames()
isTrait()
getTraitAliases()
Ringkasan:
Ciri -ciri
adalah salah satu ciri yang paling kuat yang diperkenalkan dalam Php 5.4, dan artikel ini membincangkan hampir semua ciri -cirinya. Mereka membenarkan pengaturcara untuk menggunakan semula coretan kod secara mendatar antara pelbagai kelas yang tidak perlu berada dalam hierarki warisan yang sama. Mereka menyediakan mekanisme penggunaan semula kod ringan dan bukan semantik yang kompleks. Walaupun terdapat beberapa kelemahan ciri -ciri, mereka pasti dapat membantu memperbaiki reka bentuk aplikasi anda, menghapuskan duplikasi kod, dan menjadikannya lebih kering.
(bahagian Soalan Lazim ditinggalkan di sini kerana panjang artikel. Maklumat teras telah diliputi dalam kandungan di atas.)
Atas ialah kandungan terperinci Menggunakan ciri -ciri dalam Php 5.4. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!