Rumah >pembangunan bahagian belakang >tutorial php >Bolehkah saya Menggunakan Operator Bertitik Berganda (::) untuk Memanggil Kaedah Bukan Statik dalam PHP?

Bolehkah saya Menggunakan Operator Bertitik Berganda (::) untuk Memanggil Kaedah Bukan Statik dalam PHP?

Barbara Streisand
Barbara Streisandasal
2024-11-19 17:00:03440semak imbas

Can I Use the Double Colon (::) Operator to Call Non-Static Methods in PHP?

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!

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