Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Saya Tidak Boleh Memanggil Kaedah PHP Bukan Statik Menggunakan Operator Bertitik Berganda (::)?

Mengapa Saya Tidak Boleh Memanggil Kaedah PHP Bukan Statik Menggunakan Operator Bertitik Berganda (::)?

Linda Hamilton
Linda Hamiltonasal
2024-11-28 17:14:12267semak imbas

Why Can't I Call Non-Static PHP Methods Using the Double Colon (::) Operator?

Memahami Invokasi Kaedah Bukan Statik dengan Titik Bertitik Berganda (::)

Apabila cuba memanggil kaedah bukan statik menggunakan sintaks kaedah statik (class::method), anda mungkin menghadapi ralat. Bertentangan dengan isu konfigurasi, tingkah laku ini adalah intrinsik kepada reka bentuk PHP.

Dalam PHP, kaedah bukan statik memerlukan tika dibuat terlebih dahulu untuk digunakan. Ralat berlaku kerana apabila menggunakan sintaks class::method, tiada instance disediakan secara eksplisit.

Perbezaan Antara Kaedah Statik dan Bukan Statik

Kaedah statik boleh dipanggil tanpa contoh kelas, manakala kaedah bukan statik memerlukan contoh. Perbezaan ini jelas dalam contoh di bawah:

class Teste {

    public function fun1() {
        echo 'fun1';
    }
    public static function fun2() {
        echo "static fun2" ;
    }
}

Teste::fun2(); // This is valid because fun2 is a static method
Teste::fun1(); // This will generate an error because fun1 is not a static method

Gelagat Tidak Konsisten

Walau bagaimanapun, PHP mempamerkan beberapa kelakuan tidak konsisten dengan kaedah bukan statik yang dipanggil statik. Jika kaedah bukan statik dipanggil secara statik dari dalam kaedah bukan statik kelas yang sama, $this dalam kaedah bukan statik akan merujuk kepada tika semasa kelas.

class A 
{
    public function test()
    {
        echo $this->name;
    }
}

class C 
{
    public function q()
    {
        $this->name = 'hello';
        A::test();
    }
}

$c = new C;
$c->q(); // This will print 'hello'

Tingkah laku ini boleh dianggap tersilap dengan pelaporan ralat ketat didayakan.

Kesimpulan

Memanggil kaedah bukan statik menggunakan sintaks kaedah statik secara amnya tidak digalakkan. Ia boleh membawa kepada tingkah laku atau kesilapan yang tidak dijangka. Sebaliknya, adalah disyorkan untuk menggunakan sintaks yang betul untuk menggunakan kaedah bukan statik, yang melibatkan mencipta tika kelas dan kemudian memanggil kaedah pada tika itu.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Memanggil Kaedah PHP Bukan Statik Menggunakan Operator Bertitik Berganda (::)?. 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