Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Saya Tidak Boleh Memanggil Kaedah PHP Bukan Statik Menggunakan Operator Bertitik Berganda (::)?
Memahami Invokasi Kaedah Bukan Statik dengan Titik Bertitik Berganda (::)
Apabila cuba memanggil kaedah bukan statik menggunakan sintaks kaedah statik (class::method), anda mungkin menghadapi ralat. Bertentangan dengan isu konfigurasi, tingkah laku ini adalah intrinsik kepada reka bentuk PHP.
Dalam PHP, kaedah bukan statik memerlukan tika dibuat terlebih dahulu untuk digunakan. Ralat berlaku kerana apabila menggunakan sintaks class::method, tiada instance disediakan secara eksplisit.
Perbezaan Antara Kaedah Statik dan Bukan Statik
Kaedah statik boleh dipanggil tanpa contoh kelas, manakala kaedah bukan statik memerlukan contoh. Perbezaan ini jelas dalam contoh di bawah:
class Teste { public function fun1() { echo 'fun1'; } public static function fun2() { echo "static fun2" ; } } Teste::fun2(); // This is valid because fun2 is a static method Teste::fun1(); // This will generate an error because fun1 is not a static method
Gelagat Tidak Konsisten
Walau bagaimanapun, PHP mempamerkan beberapa kelakuan tidak konsisten dengan kaedah bukan statik yang dipanggil statik. Jika kaedah bukan statik dipanggil secara statik dari dalam kaedah bukan statik kelas yang sama, $this dalam kaedah bukan statik akan merujuk kepada tika semasa kelas.
class A { public function test() { echo $this->name; } } class C { public function q() { $this->name = 'hello'; A::test(); } } $c = new C; $c->q(); // This will print 'hello'
Tingkah laku ini boleh dianggap tersilap dengan pelaporan ralat ketat didayakan.
Kesimpulan
Memanggil kaedah bukan statik menggunakan sintaks kaedah statik secara amnya tidak digalakkan. Ia boleh membawa kepada tingkah laku atau kesilapan yang tidak dijangka. Sebaliknya, adalah disyorkan untuk menggunakan sintaks yang betul untuk menggunakan kaedah bukan statik, yang melibatkan mencipta tika kelas dan kemudian memanggil kaedah pada tika itu.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Memanggil Kaedah PHP Bukan Statik Menggunakan Operator Bertitik Berganda (::)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!