Rumah > Artikel > pembangunan bahagian belakang > Mengapa Kaedah Kelas Statik Abstrak Dimansuhkan dalam PHP 5.2?
Pemansuhan PHP Kaedah Kelas Statik Abstrak dalam 5.2
Dalam PHP 5.2 dan seterusnya, penggunaan kaedah statik abstrak dalam kelas adalah dilarang. Keputusan ini berpunca daripada gabungan pengawasan, kecacatan reka bentuk dan salah faham kata kunci diri.
Konteks Bermasalah
Pada mulanya, PHP 5.0x dan 5.1x tersilap membenarkan pengisytiharan fungsi statik abstrak dalam kelas. Walau bagaimanapun, ini telah menjadi tidak berguna kerana ketiadaan pengikatan statik lewat. Akibatnya, kod seperti berikut akan gagal:
abstract class ParentClass { static function foo() { self::bar(); } abstract static function bar(); } class ChildClass extends ParentClass { static function bar() { echo "Hello, World!"; } } ChildClass::foo();
Dalam contoh ini, self::bar() call in foo() merujuk kepada kaedah bar() dalam ParentClass, walaupun foo( ) digunakan sebagai kaedah ChildClass. Akibatnya, kod menjana ralat maut, menunjukkan bahawa kaedah abstrak ParentClass::bar() tidak boleh dipanggil.
Jusifikasi Amaran
Memandangkan had ini , PHP 5.2 berhak mengeluarkan amaran untuk tidak menggalakkan penggunaan kaedah statik abstrak. Memandangkan ia tidak mempunyai tujuan praktikal, sebarang penggunaan mungkin disebabkan oleh salah faham dan oleh itu dianggap kod buruk.
Salah Faham Selesai
PHP 5.3 memperkenalkan pengikatan statik lewat, membenarkan kaedah dalam kelas induk mengakses kaedah statik dalam kelas anak. Dengan penambahan ini, rasional untuk melarang kaedah statik abstrak menjadi kurang menarik. Walau bagaimanapun, amaran itu berterusan disebabkan oleh hujah yang lemah bahawa mendedahkan kaedah statik yang rosak boleh menjadi masalah.
Ralat dan Penyelesaiannya
Malangnya, salah faham oleh Rasmus Lerdorf, Pencipta PHP, membawa kepada kesilapan penutupan laporan pepijat yang menyokong penyingkiran amaran itu. Selepas itu, amaran itu kekal dilaksanakan walaupun tiada justifikasi yang kukuh.
Masa Depan Kaedah Statik Abstrak
Nasib baik, PHP 7 akhirnya mengeluarkan amaran itu, kerana dicadangkan dalam RFC: Klasifikasikan semula notis E_STRICT. Dengan pemansuhannya, pembangun boleh sekali lagi menggunakan kaedah statik abstrak tanpa menghadapi amaran palsu.
Atas ialah kandungan terperinci Mengapa Kaedah Kelas Statik Abstrak Dimansuhkan dalam PHP 5.2?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!