Bu dahili statik yöntemde kurucusunu çağırmak için iyi bir fikir mi?

1 Cevap php

Örneğin ben, normal kullanım bir nesne oluşturmak için bir yerelleştirilmiş tarih sınıf vardı diyelim.

$d = new Date(mktime(), 'MM-DD-YYYY', array('locale' => 'es'));

Şimdi, ne zaman açıkça yeni bir nesne oluşturmak istiyor, ama yerine çizgisinde daha fazla şey istedim vermedi ...

<p>The date is <?php echo 
Date::formatDate( mktime(), 'MM-DD-YYYY', array('locale'=>'es') );?>
</p>

Benim formatDate yönteminde, bir tarih nesnesi oluşturmak için dahili kurucu çağırmak için, ya da ben tamamen tüm iç yöntemi statik çağrıları yapmak gerekir iyi bir fikir olurdu?

class Date {
    function getLocalisedDate( $time, $format, $options ) {
        $obj = Date::Date(
            $time, $format, $options
        ); // invoke the constructor
        return $obj->get();
    }
};

Ben OO dilde ortak bir model olmadığını merak ediyorum, birçok sınıf gelişmiş değil.

1 Cevap

Sorun olduğu < php 5.3 statik yöntem her zaman sabit kodlanmış sınıfının bir örneğini oluşturmak için gidiyor. Yani aslında MyAdvancedDate hangi uzanır Date sen her zaman ebeveynin bir örneğini almak için gidiyoruz kullanıyorsanız, çünkü self ve __CLASS__ her zaman Eğer torun sınıfları açıkça yöntemini geçersiz sürece, bu tabii içeri sınıfa başvurmak için gidiyoruz yöntemdir aslında. Bu bağlayıcı Geç statik olarak adlandırılır.

I 5.2 LSB uygulamak gerektiğinde ben genelde statik bir özellik yapmak ve bana statik çağrıları tarafından örneği sınıfını değiştirmek için izin veren statik erişimcilerini ilgili. Burada tek şey bu hala sadece hiç statik özelliği yönüyle değişecektir değiştirme gibi bir tek descedent kullanmak için gidiyoruz varsayar olduğunu. Bu olsa bağlı bir yumruk çalışmak ne proje / app / modül / paketinin gerçek mimarisi.