PHP bir Sınıf Statik Olmayan Fonksiyon Erişim

5 Cevap php

Neden bu PHP yasaldır?

<?php
class Foo {
    public function test() {
        echo "hello\n";
    }
}

Foo::test();
?>

testi () bir statik olmayan işlev ama ben bir örneği olmadan erişebilirsiniz.

5 Cevap

Ben çünkü geriye doğru uyumluluk inanıyorum. PHP4 size yöntemleri için statik anahtar kelime yoktu (hala referans arıyor, ama şimdiye kadar bu ben buldum hepsi http://us2.php.net/manual/en/language.oop5.static.php). Bu şekilde, PHP4 kod hala bir sorun olmadan çalıştırabilirsiniz.

Bu gibi statik fonksiyonları bildirmek için iyi bir uygulamadır ve E_STRICT açmak eğer bu konuda bir bildirim görürsünüz.

error_reporting(E_ALL | E_STRICT);

Update: iyi, bu ben http://bugs.php.net/bug.php?id=34990 ve http://bugs.php.net/bug.php?id=47891 buldum en iyisidir.

Eğer ölümcül bir hata atmak olacaktır statik denilen yöntemi $this başvurmak kadar, yasal, ama genellikle hoş karşılanmaz bulunuyor.

Kimden PHP Manual:

Calling non-static methods statically generates an E_STRICT level warning.

Eğer E_STRICT hata düzeyi etkin değil çünkü bu çalışır. Bir kez etkin PHP bunu size izin duracaktır.

Ben nesnenin bir örneği dışında bir sınıf yöntemi erişebilirsiniz inanmıyorum.