Mengapa Saya Tidak Boleh Memanggil Kaedah Bukan Statik Menggunakan Sintaks Bertindih Dua dalam PHP?

Susan Sarandon
Lepaskan: 2024-11-27 01:15:18
asal
899 orang telah melayarinya

Why Can't I Call Non-Static Methods Using the Double-Colon Syntax in PHP?

Memanggil Kaedah Bukan Statik dengan Sintaks Kolon Berganda

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
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan