PHP5 PHP4 yapıcı adlandırma kuralı

7 Cevap php

Kenara "Eğer adını değiştirmek zorunda kalmazsınız", PHP4 tarzı yapıcı isimlerini muhafaza ile herhangi bir gerçek sorunları vardır:

ClassName($args)

PHP5?

7 Cevap

Adlı kurucular sadece PHP4 ile geriye dönük uyumluluk için PHP5'ta tutuldu çünkü bir şey yazıyoruz, onlar akılda tutulması gereken bir şey yani, __construct() daha PHP'nin sonraki bir sürümde itiraz olma olasılığı daha yüksektir Eğer uzun ömürlü olması niyetinde.

Eğer eski tarz bir kurucu adları kullanıyorsanız, bu gibi durumlarda etrafında biraz karışıklık yaratıyor ediyoruz

class A
{
    public function A()
    {
    }
}

class B extends A
{
    public function B()
    {
        //how do/should I call the parent constructor?
        //parent::A(); ?
        //parent::__construct(); ?
    }
}

Birisi eski stil kurucu görür ve bir daha eski tarz kurucusuna onu geçer ise, işlevsellik kırma riski. Eğer B farklı bir sınıfını genişleten böylece nesne hiyerarşi oynama varsa da, elle parent::A() tüm aramaları değiştirmek gerekir, ya da "yapıcısı aşina olmayan birisi sınıf adıyla bir yöntemdir "O ve ince kırma oluşacak yapmak bilmiyor olabilir (son 5 yıl içinde PHP öğrendim herkes anlamında) inşa.

According to the documentation, bu tek dezavantajı bulunuyor.

PHP5 için, onu koruyarak herhangi bir problem yoktur. Sınıf bir __ construct () fonksiyonu varsa Ancak, bunun yerine çağrılacak.

Hayır Bunun yanı sıra bu çirkin-ish (IMO) bulunuyor ve uzak olası bir işlev adını alır. ^ ^

php 4 oop burada her şeyden daha kesmek php 5 tarzda bir kurucu için snipped bir kodu ama php 4 için uyumlu

class Object
{
    function Object()
    {
        $args= func_get_args();
        call_user_func_array
        (
            array(&$this, '__construct'),
            $args
        );
    }

    function __construct()
    {
        // Abstrakt Funktion
    }
}

Ben PHP5 kurucular sadece (daha fazla seçenek için izin) daha özgürce PHP ile çalışmak için izin düşünüyorum.