Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Dapatkan Nama Subkelas daripada Panggilan Kaedah Statik dalam Kelas PHP Lanjutan?

Bagaimanakah Saya Boleh Dapatkan Nama Subkelas daripada Panggilan Kaedah Statik dalam Kelas PHP Lanjutan?

DDD
DDDasal
2024-10-30 05:58:02254semak imbas

How Can I Retrieve the Subclass Name from a Static Method Call in Extended PHP Classes?

Cara Mendapatkan Nama Kelas daripada Panggilan Statik dalam Kelas PHP Lanjutan

Dalam kejuruteraan perisian, pewarisan membenarkan kelas mewarisi sifat dan fungsi daripadanya kelas ibu bapa. Dalam PHP, apabila anda melanjutkan kelas dengan subkelas, anda boleh mengakses sifat dan kaedah yang ditakrifkan dalam kelas induk. Walau bagaimanapun, mengakses nama subkelas dari dalam kaedah statik dalam kelas induk boleh menjadi mencabar.

Masalah:

Andaikan anda mempunyai kelas induk Tindakan dan subkelas MyAction yang mewarisi daripada Action. Anda ingin membangunkan kaedah dalam kelas Tindakan yang mengembalikan nama subkelas apabila dipanggil secara statik dari dalam subkelas. Walau bagaimanapun, menggunakan pembolehubah __CLASS__ dalam kelas induk sentiasa mengembalikan nama kelas induk, yang bukan hasil yang diingini.

Penyelesaian 1: Pengikatan Statik Lewat (PHP 5.3 ):

PHP 5.3 memperkenalkan pengikatan statik lewat, yang menyelesaikan kelas sasaran untuk panggilan kaedah statik pada masa jalan dan bukannya semasa definisi. Ciri ini membolehkan penggunaan fungsi get_called_class(), yang mendapatkan semula nama kelas dari mana kaedah statik digunakan.

Sebagai contoh:

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

class MyAction extends Action {

}

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

Dalam contoh ini, get_called_class() fungsi mengembalikan nama subkelas MyAction, walaupun kaedah ditakrifkan dalam tindakan kelas induk. Pendekatan ini memberikan penyelesaian yang mudah kepada masalah.

Penyelesaian 2: Pengambilan Nama Kelas Dinamik (PHP 5.2 ):

Sementara pengikatan statik lewat tidak tersedia dalam versi PHP sebelum 5.3, terdapat kaedah alternatif untuk mendapatkan semula nama kelas secara dinamik:

<code class="php">class Action {
    public function n() {
        $object = new ReflectionObject($this);
        return $object->getName();
    }
}

class MyAction extends Action {

}

$myAction = new MyAction();
echo $myAction->n(); //displays MyAction</code>

Dalam pendekatan ini, kami mencipta contoh ReflectionObject untuk objek semasa dan menggunakan kaedah getName() untuk mendapatkan semula nama kelas . Penyelesaian ini berfungsi dalam versi PHP kembali ke 5.2 tetapi memerlukan langkah tambahan untuk mencipta objek pantulan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan Nama Subkelas 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