Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Saya Tidak Boleh Memanggil Kaedah PHP Bukan Statik Menggunakan Sintaks Bertindih Dua?

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

Patricia Arquette
Patricia Arquetteasal
2024-12-03 21:13:12380semak imbas

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

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!

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