Rumah > Artikel > pembangunan bahagian belakang > Mengapakah Panggilan ke Kaedah Bukan Statik Menggunakan Sintaks Kolon Berganda PHP Gagal?
Memanggil Kaedah Bukan Statik Menggunakan Sintaks Kolon Berganda
Dalam PHP, adalah mungkin untuk memanggil kaedah bukan statik menggunakan sintaks kaedah statik , kelas::kaedah. Walau bagaimanapun, mengapakah panggilan sedemikian gagal?
Pertimbangkan contoh berikut:
class Teste { public function fun1() { echo 'fun1'; } public static function fun2() { echo "static fun2"; } }
Memanggil Teste::fun2() berfungsi kerana ia adalah kaedah statik, tetapi memanggil Teste::fun1 () menimbulkan ralat.
Penjelasan terletak pada pengendalian longgar PHP terhadap kaedah statik vs bukan statik. Apabila kaedah bukan statik dipanggil secara statik dari dalam kaedah bukan statik kelas C, $ini di dalam kaedah bukan statik ns merujuk kepada contoh C.
Contohnya:
class A { public function test() { echo $this->name; } } class C { public function q() { $this->name = 'hello'; A::test(); } } $c = new C; $c->q(); // prints hello
Walaupun ini boleh menyebabkan tingkah laku yang tidak dijangka, ini bukan satu ralat melainkan pelaporan ralat yang ketat didayakan. Oleh itu, memanggil kaedah bukan statik secara statik menggunakan sintaks bertitik dua adalah tidak digalakkan, kerana ia boleh membawa kepada ralat atau tingkah laku yang mengelirukan.
Atas ialah kandungan terperinci Mengapakah Panggilan ke Kaedah Bukan Statik Menggunakan Sintaks Kolon Berganda PHP Gagal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!