Dalam PHP, kaedah statik boleh digunakan menggunakan nama kelas diikuti oleh operator resolusi skop (::) . Walau bagaimanapun, secara amnya tidak mungkin untuk memanggil kaedah bukan statik dengan cara yang sama.
Kaedah Bukan Statik dengan Sintaks Bertindih Berganda
Coretan kod di bawah cuba untuk panggil kaedah bukan statik, fun1, menggunakan sintaks bertitik dua:
class Teste { public function fun1() { echo 'fun1'; } public static function fun2() { echo "static fun2" ; } } Teste::fun1(); // why? Teste::fun2(); // ok - is a static method
Kod ini akan mengakibatkan ralat, kerana kaedah bukan statik tidak boleh diakses terus melalui nama kelas.
Sebab Sekatan
PHP menggunakan penaipan longgar untuk statik berbanding bukan- kaedah statik. Apabila kaedah bukan statik dipanggil secara statik, kata kunci $this di dalam kaedah itu tidak akan merujuk kepada contoh kelas. Tingkah laku longgar ini boleh membawa kepada kod yang tidak konsisten dan berkemungkinan salah.
Varian Kaedah Statik
Sintaks bertitik dua hanya dibenarkan untuk memanggil kaedah statik. Berikut ialah contoh:
class StaticExample { public static function staticMethod() { echo "static method"; } } StaticExample::staticMethod(); // valid
Dalam Kaedah Bukan Statik
Adalah mungkin untuk memanggil kaedah bukan statik secara statik dari dalam kaedah bukan statik yang sama kelas. Dalam kes sedemikian, $this dalam kaedah yang dipanggil masih akan merujuk kepada contoh objek yang betul.
class A { public function nonStaticMethod() { echo $this->name; } } class C { public function callNonStatic() { $this->name = 'Example'; A::nonStaticMethod(); // valid } } $c = new C; $c->callNonStatic(); // prints Example
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Memanggil Kaedah Bukan Statik Menggunakan Sintaks Bertindih Dua dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!