Mendapatkan Nama Kelas daripada Extended PHP Class Static Call
Dalam pengaturcaraan berorientasikan objek, kelas sering memanjangkan kelas asas untuk mewarisi dan melanjutkan fungsinya . Senario biasa melibatkan keperluan untuk mendapatkan nama kelas daripada panggilan kaedah statik dalam kelas lanjutan, walaupun hakikatnya CLASS sentiasa mengembalikan nama kelas yang menentukan.
Masalah: Tidak Kebolehcapaian Nama Kelas dalam Kaedah Statik Induk
Pertimbangkan senario dengan dua kelas, Action dan MyAction, di mana MyAction memanjangkan Tindakan. Tindakan mentakrifkan kaedah statik, n(), yang tidak boleh diakses melalui pemalar CLASS dalam kaedah statik induk, menghasilkan CLASS nilai ditetapkan kepada "Tindakan" tanpa mengira kelas panggilan.
Penyelesaian:
1. Pengikatan Statik Lewat (PHP 5.3 ):
Ikatan statik lewat membolehkan anda menentukan kelas sasaran panggilan kaedah statik pada masa jalan dan bukannya apabila kaedah ditakrifkan. Ini dicapai menggunakan fungsi get_called_class(), yang mengembalikan nama kelas di mana kaedah statik dipanggil.
Contohnya:
<code class="php">class Action { public static function n() { return get_called_class(); } } class MyAction extends Action { } echo MyAction::n(); // Outputs "MyAction"</code>
2. Menggunakan get_class($this) (Kaedah Bukan Statik Sahaja):
Jika kaedah yang dimaksudkan bukan statik, anda boleh menggunakan get_class($this) untuk mendapatkan kelas nama dari mana kaedah itu dipanggil.
Contohnya:
<code class="php">class Action { public function n() { echo get_class($this); } } class MyAction extends Action { } $foo = new MyAction; $foo->n(); // Outputs "MyAction"</code>
Kesimpulan:
Kedua-dua pengikatan statik lewat dan get_class($this) menawarkan penyelesaian untuk mendapatkan semula nama kelas daripada panggilan kaedah statik dalam kelas lanjutan. Pengikatan statik lewat lebih disukai untuk kaedah statik, manakala get_class($this) berguna untuk kaedah bukan statik.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nama Kelas daripada Kelas PHP Lanjutan dalam Panggilan Kaedah Statik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!