PHP中如何形成static::与new static()的静态绑定
PHP中static::与new static()之后期静态绑定
一、parent、self、$this、__CLASS__
class A {} class B extends A{ parent::(public|protected)(静态方法|静态变量) ===> parent永远是A self::(public|protected)(静态方法|静态变量) ===> self永远是B $this->(public|protected)(非静态方法|非静态变量) ===> $this永远是B的是实例化对象 __CLASS__ ===> 永远是B } class C extends B{ parent::(public|protected)(静态方法|静态变量) ===> parent永远是B self::(public|protected)(静态方法|静态变量) ===> self永远是C $this->(public|protected)(非静态方法|非静态变量) ===> $this永远是C的是实例化对象 __CLASS__ ===> 永远是C }
二、static::
static关键字可以实现以下功能:
1 调用类的静态方法 有后期静态绑定效果;
2 调用类的静态属性 有后期静态绑定效果;
3 调用类的非静态方法 没有后期静态绑定效果;
4 注意:不可以调用非静态属性;
class A { private static function foo() { echo "A success!\n"; } public function test() { $this->foo(); } } class B extends A { } class C extends A { private static function foo() { echo "C success!\n"; } } $b = new B(); $b->test();//A success! $c = new C(); $c->test();//A success!
class A { private static function foo() { echo "A success!\n"; } public function test() { static::foo(); } } class B extends A { } class C extends A { private static function foo() { echo "C success!\n"; } } $b = new B(); $b->test();//A success! $c = new C(); $c->test();//A无法调用C里的私有foo方法 //将C的foo改成非private(public|protected)就可以解决 class A { private static function foo() { echo "A success!\n"; } public function test() { static::foo(); } } class B extends A { } class C extends A { public static function foo() { echo "C success!\n"; } } $b = new B(); $b->test();//A success! $c = new C(); $c->test();//C success!
class A { public static function foo() { static::who(); } public static function who() { echo __CLASS__."\n"; } } class B extends A { public static function test() { A::foo(); parent::foo(); self::foo(); } public static function who() { echo __CLASS__."\n"; } } class C extends B { public static function who() { echo __CLASS__."\n"; } } C::test(); A =>A::foo()的结果 C =>parent::foo()能走到A的foo,里面static::who找C::who C =>self::foo()能走到B的foo,B继承A,走到A的foo,里面static::who找C::who class A { protected static function foo() { static::who(); } protected static function who() { echo __CLASS__."\n"; } } class B extends A { public static function test() { A::foo(); parent::foo(); self::foo(); } protected static function who() { echo __CLASS__."\n"; } } class C extends B { protected static function who() { echo __CLASS__."\n"; } } C::test(); //A C C,解释同上 class A { public static function foo() { static::who(); } private static function who() { echo __CLASS__."\n"; } } class B extends A { public static function test() { A::foo(); parent::foo(); // self::foo(); } private static function who() { echo __CLASS__."\n"; } } class C extends B { private static function who() { echo __CLASS__."\n"; } } C::test(); //A =>A::foo()的结果 //报错 A不可C的私有方法who => parent::foo()能走到A的foo,里面static::who找C::who,C的who只能在C里调用,不能在A里调用 //报错 A不可C的私有方法who => self::foo()能走到B的foo,B继承A,走到A的foo,里面static::who找C::who,C的who只能在C里调用,不能在A里调用
三、new static()
//new self()与new static()的区别,官网例子如下: class A { public static function get_self() { return new self(); } public static function get_static() { return new static(); } } class B extends A {} echo get_class(B::get_self()); // A echo get_class(B::get_static()); // B echo get_class(A::get_static()); // A
推荐教程:《PHP视频教程》
Atas ialah kandungan terperinci PHP中如何形成static::与new static()的静态绑定. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Pengikatan statik PHPLate: petua teknikal yang menembusi pemikiran pengaturcaraan tradisional Pengenalan: Cara pemikiran pengaturcaraan tradisional biasanya untuk menentukan panggilan kaedah dan sifat pada masa penyusunan, tetapi dalam beberapa kes di mana panggilan dinamik diperlukan, pendekatan ini kelihatan terhad dan. tidak munasabah. PHP menyediakan ciri berkuasa, "Pengikatan statik lewat", yang memecahkan pemikiran pengaturcaraan tradisional dan memberikan kemudahan untuk pengikatan dinamik kaedah dan sifat. Artikel ini memperkenalkan L melalui contoh kod tertentu.

Ya! Apabila pengkompil mengetahui objek yang akan digunakan untuk pelaksanaan kaedah, ia boleh mengikat rujukan kepada objek secara statik. Contohnya, pembolehubah statik, pembolehubah persendirian dan pembolehubah akhir menggunakan pengikatan statik. Jika pengecaman objek diperlukan pada masa jalan, gunakan pengikatan dinamik. Penggantian kaedah ialah kes pengikatan dinamik. Kaedah terlebih beban adalah kes pengikatan statik.

Cipta struktur kod yang cekap dan berskala melalui pengikatan statik PHPLate Ringkasan: Dalam projek besar, kebolehskalaan dan kecekapan struktur kod adalah sangat penting. Pengikatan statik PHPLate ialah ciri berkuasa yang membantu kami membina kod yang mudah diselenggara dan dilanjutkan. Artikel ini akan memperkenalkan konsep pengikatan statik PHPLate dan menggunakan contoh kod khusus untuk menggambarkan cara menggunakannya untuk membina struktur kod yang cekap dan berskala. Pengenalan: Memandangkan perniagaan syarikat terus berkembang dan berkembang, skala projek juga meningkat secara beransur-ansur. Dengan cara ini

Cara menggunakan pengikatan statik PHPLate untuk meningkatkan kebolehgunaan semula kod Pengenalan: Dalam pembangunan PHP, penggunaan semula kod adalah salah satu faktor utama untuk meningkatkan kecekapan pembangunan dan kebolehselenggaraan. PHP menyediakan pelbagai teknik untuk mencapai kebolehgunaan semula kod, salah satu teknik penting ialah penggunaan Late static binding. Artikel ini akan memperkenalkan konsep, kelebihan dan aplikasi pengikatan statik lewat dalam pembangunan sebenar. 1. Gambaran Keseluruhan Pengikatan statik lewat Pengikatan statik lewat merujuk kepada kaedah menentukan kaedah panggilan kaedah statik atau sifat secara dinamik berdasarkan konteks semasa memanggil. wujud

Membuka kunci rahsia teknikal pengikatan statik PHPLate memerlukan contoh kod khusus Dalam beberapa tahun kebelakangan ini, PHP, sebagai bahasa skrip bahagian pelayan yang biasa digunakan, telah dialu-alukan oleh pembangun. Dengan perkembangan bahasa PHP, semakin banyak teknik dan ciri pengaturcaraan telah ditambahkan pada PHP, salah satunya adalah pengikatan statik lewat. Ikatan statik lewat bermakna bahawa dalam hubungan warisan, subkelas boleh mengatasi dan memanggil kaedah statik dan sifat kelas induk. Hubungan pewarisan ini boleh meningkatkan fleksibiliti dan kebolehskalaan kod. Jadi biarkan saya

Mengikat ialah mekanisme yang mewujudkan pautan antara panggilan kaedah dan pelaksanaan kaedah sebenar. Menurut konsep polimorfisme di Jawa, objek boleh mempunyai banyak bentuk yang berbeza. Bentuk objek boleh diselesaikan pada masa penyusunan dan masa jalankan. Jika pautan antara penyeruan kaedah dan pelaksanaan kaedah diselesaikan pada masa penyusunan, kami memanggilnya mengikat statik jika ia diselesaikan pada masa jalan, kami memanggilnya mengikat dinamik. Pengikatan dinamik menggunakan objek untuk menyelesaikan pengikatan, manakala pengikatan statik menggunakan jenis kelas dan medan. Lelaki tua. tidak. Pengikatan statik kunci Pengikatan dinamik 1 Resolusi asas pada masa penyusunan Diselesaikan pada masa berjalan 2 Mekanisme penyelesaian Pengikatan statik menggunakan jenis kelas dan medan Pengikatan dinamik menggunakan objek untuk menyelesaikan pengikatan 3 Contoh beban lampau adalah contoh pengikatan statik Kaedah terlebih beban Penulisan adalah contoh pengikatan dinamik 4. Jenis kaedah adalah peribadi,

Pengikatan statik PHPLate: alat teknikal untuk mengoptimumkan pewarisan kod Pengenalan latar belakang: Dalam pengaturcaraan berorientasikan objek, pewarisan ialah teknologi penggunaan semula kod biasa. Melalui pewarisan, kita boleh mencipta kelas baharu dan mewarisi sifat dan kaedah daripada kelas sedia ada (dipanggil induk atau kelas asas). Dengan cara ini, kami boleh mengurangkan pertindihan kod dan meningkatkan kebolehselenggaraan dan kebolehskalaan kod. Walau bagaimanapun, dalam pewarisan, kita sering menghadapi masalah: apabila memanggil kaedah statik kelas induk dalam subkelas, kerana pengikatan kaedah statik selesai pada masa penyusunan, subkelas memanggil kaedah statik.
