Pengikatan statik lewat (LSB) adalah ciri yang diperkenalkan dalam Php 5.3 yang membolehkan lebih banyak fleksibiliti dalam warisan statik. Dalam kaedah statik tradisional panggilan dalam PHP, apabila kaedah statik dipanggil dari dalam kaedah statik yang lain, resolusi nama kelas dilakukan pada masa penyusunan, bukan runtime. Ini boleh membawa kepada tingkah laku yang tidak dijangka dalam senario yang melibatkan warisan.
LSB mengubah ini dengan membenarkan resolusi kelas berlaku pada masa runtime, menggunakan kata kunci yang dipanggil static
. Apabila static
digunakan sebagai ganti self
dalam kaedah statik, ia merujuk kepada kelas yang digunakan semasa memanggil kaedah, dan bukannya kelas di mana kaedah itu ditakrifkan.
Sebagai contoh, pertimbangkan kod berikut:
<code class="php">class A { public static function who() { echo __CLASS__; } public static function test() { static::who(); // Here, static:: refers to the called class. } } class B extends A { public static function who() { echo __CLASS__; } } B::test(); // Outputs: B</code>
Dalam contoh ini, panggil B::test()
hasil dalam B::who()
dipanggil kerana static::
menyelesaikan kepada kelas B
yang dipanggil pada runtime.
Pengikatan statik dan polimorfisme tradisional dalam PHP berkhidmat dengan tujuan yang berbeza, walaupun kedua -duanya berkaitan dengan bagaimana objek atau kelas berkelakuan dalam senario warisan.
Polimorfisme tradisional dalam PHP dicapai melalui pengaturcaraan berorientasikan objek, di mana objek kelas yang berbeza boleh dianggap sebagai objek kelas asas yang sama. Ini biasanya dicapai dengan kaedah dan kaedah yang ditindas dalam kelas yang diperolehi. Apabila kaedah dipanggil pada objek, kaedah sebenar yang dilaksanakan ditentukan oleh jenis objek semasa runtime.
Sebaliknya, tawaran mengikat statik lewat khusus dengan kaedah statik dan resolusi panggilan statik. Polimorfisme tradisional tidak terpakai kepada kaedah statik kerana kaedah statik tergolong dalam kelas, bukan contohnya. Pengikatan statik lewat membolehkan panggilan kaedah statik dapat diselesaikan semasa runtime, sama seperti bagaimana polimorfisme berfungsi dengan kaedah objek, tetapi ia terhad kepada konteks statik.
Perbezaan utama ialah pengikatan statik lewat membolehkan tingkah laku yang lebih dinamik dalam konteks statik, yang tidak mungkin dengan panggilan kaedah statik tradisional sebelum Php 5.3.
Pengikatan statik lewat mempunyai beberapa aplikasi praktikal dalam pembangunan PHP, termasuk:
Corak Kilang : LSB berguna dalam corak kilang di mana anda perlu membuat contoh baru kelas yang dipanggil. Dengan menggunakan static::
, anda boleh memastikan bahawa kelas yang betul ditandakan, walaupun ia adalah subclass.
<code class="php">class Base { public static function getInstance() { return new static(); } } class Derived extends Base {} $derivedInstance = Derived::getInstance(); // Returns an instance of Derived</code>
Corak Singleton : Apabila melaksanakan corak singleton, LSB dapat memastikan bahawa contoh singleton adalah subkelas yang betul.
<code class="php">class Singleton { private static $instance; public static function getInstance() { if (is_null(static::$instance)) { static::$instance = new static(); } return static::$instance; } } class DerivedSingleton extends Singleton {} $derivedSingleton = DerivedSingleton::getInstance(); // Returns an instance of DerivedSingleton</code>
Pengikatan statik lewat adalah ciri yang meningkatkan fleksibiliti dan ekspresi kod PHP, dan bukannya meningkatkan prestasi secara langsung. Walau bagaimanapun, terdapat senario di mana LSB boleh membawa kepada manfaat prestasi:
Ringkasnya, sementara pengikatan statik lewat sendiri tidak secara langsung meningkatkan prestasi kod PHP, ia boleh membawa kepada struktur dan corak kod yang lebih cekap yang dapat meningkatkan prestasi aplikasi keseluruhan.
Atas ialah kandungan terperinci Terangkan konsep pengikatan statik lewat dalam PHP.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!