Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk mendapatkan semula nama kelas daripada panggilan kaedah statik dalam kelas PHP lanjutan?

Bagaimana untuk mendapatkan semula nama kelas daripada panggilan kaedah statik dalam kelas PHP lanjutan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-30 21:53:30932semak imbas

How to retrieve the class name from a static method call in extended PHP classes?

Mengambil Nama Kelas daripada Panggilan Statik dalam Kelas PHP Lanjutan

Dalam dunia PHP, selalunya perlu untuk menentukan nama kelas daripada statik panggilan fungsi, terutamanya apabila bekerja dengan kelas lanjutan. Pertimbangkan senario berikut:

<code class="php">class Action {
    function n() {/* some implementation */}
}

class MyAction extends Action {/* further implementation */}</code>

Dalam situasi ini, memanggil MyAction::n(); harus mengembalikan "MyAction" sebagai nama kelas. Walau bagaimanapun, pembolehubah __CLASS__ hanya mengembalikan nama kelas induk ("Tindakan").

Pengikatan Statik Lewat (PHP 5.3 ):

PHP 5.3 memperkenalkan pengikatan statik lewat, yang membolehkan menyelesaikan kelas sasaran pada masa jalan. Ciri ini memungkinkan untuk menentukan kelas yang dipanggil menggunakan fungsi get_called_class():

<code class="php">class Action {
    public static function n() {
        return get_called_class();
    }
}

class MyAction extends Action {

}

echo MyAction::n(); // Output: MyAction</code>

Pendekatan Alternatif (Pra-PHP 5.3):

Sebelum PHP 5.3, penyelesaian alternatif bergantung pada penggunaan kaedah bukan statik dan fungsi get_class():

<code class="php">class Action {
    public function n(){
        return get_class($this);
    }
}

class MyAction extends Action {

}

$foo = new MyAction;

echo $foo->n(); // Output: MyAction</code>

Ingat, pendekatan ini hanya berfungsi untuk kaedah bukan statik, kerana fungsi get_class() mengambil contoh daripada kelas sebagai hujah.

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan semula nama kelas daripada panggilan kaedah statik dalam kelas PHP lanjutan?. 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