Memanggil Kaedah Bukan Statik dengan Sintaks Bertitik Dua
Dalam PHP, adalah perkara biasa untuk memanggil kaedah statik menggunakan sintaks bertitik dua, seperti ClassName::methodName(). Walau bagaimanapun, cubaan menggunakan kaedah bukan statik dengan sintaks ini boleh menyebabkan kekeliruan.
Mengapa Sintaks Kolon Berganda Tidak Berfungsi untuk Kaedah Bukan Statik
Tidak seperti kaedah statik, kaedah bukan statik memerlukan contoh kelas untuk beroperasi. Apabila kaedah bukan statik dipanggil dengan ClassName::methodName(), PHP mentafsirkannya sebagai kaedah statik, yang tidak masuk akal untuk kaedah yang memerlukan pembolehubah contoh tertentu atau akses kepada kata kunci $this.
Taip Longgar PHP
PHP mengendalikan kaedah statik dan bukan statik secara berbeza, tetapi penting untuk ambil perhatian bahawa PHP agak longgar dalam hal ini. Walaupun memanggil kaedah bukan statik dengan sintaks bertitik dua secara teknikalnya tidak betul, PHP mungkin masih membenarkannya dalam keadaan tertentu.
Walau bagaimanapun, tingkah laku ini boleh membawa kepada hasil yang tidak dijangka atau ralat, terutamanya apabila menggunakan pelaporan ralat yang ketat . Dalam kes sedemikian, PHP akan membuang ralat yang menunjukkan bahawa kaedah bukan statik mesti dipanggil pada objek.
Merujuk $ini daripada Kaedah Bukan Statik
Menariknya , PHP membenarkan memanggil kaedah bukan statik secara statik dari dalam kaedah bukan statik lain dari kelas yang sama. Dalam kes ini, kata kunci $this dalam kaedah yang dipanggil akan merujuk kepada contoh kelas panggilan.
Sebagai contoh, pertimbangkan kod berikut:
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
Dalam contoh ini, kaedah test() kelas A dipanggil secara statik daripada kaedah q() kelas C. Kata kunci $ini dalam test() merujuk contoh C ($c), membenarkan kod mengakses sifat nama dan mencetak "hello."
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Memanggil Kaedah PHP Bukan Statik Menggunakan Sintaks Bertindih Dua?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!