Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah Panggilan ke Kaedah Bukan Statik Menggunakan Sintaks Kolon Berganda PHP Gagal?

Mengapakah Panggilan ke Kaedah Bukan Statik Menggunakan Sintaks Kolon Berganda PHP Gagal?

Linda Hamilton
Linda Hamiltonasal
2024-11-21 09:53:10420semak imbas

Why Do Calls to Non-Static Methods Using PHP's Double Colon Syntax Fail?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn