Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Kaedah Kelas Statik Abstrak Dimansuhkan dalam PHP 5.2?

Mengapa Kaedah Kelas Statik Abstrak Dimansuhkan dalam PHP 5.2?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-12 04:26:01305semak imbas

Why Were Abstract Static Class Methods Abolished in 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!

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