Invokasi Kaedah Bukan Statik Menggunakan Titik Bertitik Berganda (::)
Dalam PHP, kaedah bukan statik tidak boleh digunakan menggunakan sintaks kaedah statik (kelas::kaedah). Tingkah laku ini berpunca daripada sifat kaedah statik dan bukan statik yang berbeza.
Kaedah statik ditakrifkan dalam kelas tetapi tidak memerlukan tika kelas untuk dipanggil. Ia biasanya digunakan untuk fungsi utiliti atau pemalar. Sebaliknya, kaedah bukan statik memerlukan contoh kelas dibuat sebelum ia boleh diakses.
Sintaks bertindih bertindih (::) dikhaskan untuk menggunakan kaedah statik. Apabila anda cuba menggunakan kaedah bukan statik menggunakan sintaks ini, PHP menimbulkan ralat. Ralat ini bukan isu konfigurasi tetapi lebih kepada had asas bahasa.
Contoh:
class Teste { public function fun1() { echo 'fun1'; } public static function fun2() { echo "static fun2" ; } } // Attempt to invoke non-static method using double colon syntax Teste::fun1(); // Raises error // Invocation of static method using double colon syntax Teste::fun2(); // Works as expected
Pertimbangan Khas
Walaupun bukan- kaedah statik tidak boleh digunakan menggunakan sintaks bertitik dua, terdapat satu pengecualian untuk peraturan ini. Dalam kaedah bukan statik, anda boleh menggunakan kaedah bukan statik bagi kelas yang sama menggunakan sintaks berikut:
$this->nonStaticMethod();
Dalam konteks ini, kata kunci $this mewakili tika semasa kelas, membenarkan anda untuk mengakses kaedah bukan statik dari dalam contoh yang sama. Selain itu, jika anda memanggil kaedah bukan statik secara statik dari dalam kaedah bukan statik kelas yang sama, $this dalam kaedah yang digunakan akan merujuk kepada tika kelas panggilan.
Contoh:
class A { public $name; public function test() { echo $this->name; } } class C { public function q() { $this->name = 'hello'; A::test(); } } $c = new C(); $c->q(); // Prints 'hello'
Adalah penting untuk ambil perhatian bahawa pengecualian kepada peraturan ini tidak selalu diingini. Pelaporan ralat yang ketat boleh mengakibatkan ralat jika anda cuba menggunakan sintaks ini secara tidak sengaja.
Atas ialah kandungan terperinci Bolehkah saya Menggunakan Operator Bertitik Berganda (::) untuk Memanggil Kaedah Bukan Statik dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!