Singleton sınıf ve devralma kullanarak

4 Cevap php

Ben yardımcı sınıfları kullanan bir web uygulaması üzerinde çalışıyorum var. Bu sınıflar, form işleme gibi çeşitli işletme fonksiyonları tutun.

Bazen benim uygulamada birden fazla noktada bu derslere ihtiyacım, ben şimdi bunu yolu, yeni bir nesne yapmaktır. Ben değişken, bu çok iş olacak geçemez.

Bunun için tekiz sınıfları kullanarak merak ediyordum. Eminim tek bir örneği ben bu şekilde bir anda çalışıyor.

Benim soru ancak ben bu desen kullandığınızda, tüm nesneler için bir singleton sınıfı yapmak gerektiğidir, kod çoğaltma bu olur ba çok.

Ben bunun yerine bir tek sınıf superHelper, bir süper sınıf yapmak, ve sonra her yardımcı uzatmak izin verebilir.

Bu tür iş kurmak, veya başka bir alternatif yoktur misiniz?

Eğer çalışırsa, birisi böyle bir superHelper sınıf kod konusunda herhangi bir öneriniz var mı.

Teşekkürler çocuklar

4 Cevap

Ben değişken, bu çok iş olacak geçemez.

Eğer olsa emin misin? İnsanlar bağımlılıkları etrafında geçen çaba abartma eğilimindedir. Eğer yapıcısı bunu yaparsanız, bunu yapmak için genellikle oldukça basit.

O dedi, php farklı şekillerde, küresel kapsamda paylaşılan işlevselliği koyabilirsiniz. Basit bir global işlevini kullanmaktır. Örn. bir fonksiyon, herhangi bir sınıfa ait değildir. Başka bir seçenek statik bir sınıf yöntemi kullanmaktır. Bu iki çok benzer bir; kendi sözdizimi hariç, onlar aslında aynı özelliklere sahip. Biraz gevşek bağlanmış çözüm beton sınıfı uzanan ki, bir (soyut) taban sınıf bir yöntem olarak işlevselliğini koymaktır. Bu, tüm alt sınıflar arasındaki işlevselliği paylaşıyor.

Yukarıda sözü edilen çözümler için ortak bir derleme zaman bir bağlantıya sahip olmasıdır. Eğer uygulama oldukça sert yapar, zamanında bağımlılığını değiştirmek olamaz. Onların ana parası taşıdıkları karmaşıklık düzeyinin düşük olmasıdır.

Eğer gevşek bağlanmış bir uygulama istiyorsanız, yönlendirme düzeyi vermek için, bir değişken ile sabit bağımlılığını değiştirmek için deneyebilirsiniz. Simples bir nesne oluşturmak ve bu uygulama boyunca küresel ortak yapmaktır. Bu tür küresel kapsamda bir singleton ya da sadece bir değişken olarak PHP, bunu yapmak için çeşitli yollar vardır (Sen global anahtar kelime veya $GLOBALS ile birlikte bu erişebilirsiniz dizi).

Global değişkenler yönlendirme düzeyi sunarken birbirlerine bağlıdır uygulamanın hangi bölümlerini anlamaya çok zor hale beri, onlar da, karmaşık bir sürü tanıtmak eğilimindedir. Bu nedenle, genellikle deneyimli programcılar tarafından önlenir. Değişken durumu varsa, bu özellikle doğrudur; Paylaşılan nesne vatansız ise sorun daha az yaygındır.

Global değişkenler tehlikeleri önlemek için tek yol, bunun yerine yerel değişkenler kullanmaktır. Örn. Etrafında bağımlılıkları geçmek için. Bu bir güçlük biraz olabilir, ama benim deneyim genellikle olduğu ortaya yapılmış gibi büyük bir sorun değil. En azından, faydaları genellikle sorunlar ağır basmaktadır. O dedi, kolay ağrı teknikleri vardır; Sizin için tüm kablolama dikkat otomatik fabrikaları özellikle bağımlılık enjeksiyon kapları,. Onlar olsa karmaşıklık kendi düzeyi ile gelir, ancak büyük uygulamalar için kesinlikle iyi bir çözüm olabilir.

Fabrika deseni ve bağımlılık enjeksiyon içine bak.

http://www.potstuck.com/2009/01/08/php-dependency-injection/

Sen bir tek sınıfını genişletmek olamaz. Bir yapıcı nasıl bu sınıfını genişletmek olabilir daha özel yani eğer biz yapıcı özel hale tekiz sınıfta hatırlıyor musun? Hepimiz biz yapıcı aramak ve çocuk sınıf kurucusu içinde dolaylı ana kurucu denilen bir sınıfın bir nesne oluşturmak biliyorum. Yani bu senaryoda bir özel yapıcı çocuk sınıfta denilen olamaz.

Bazen gerekli olsa da (küresel devlet çünkü), singletons kötülük vardır. Eğer yardımcı olabilir eğer bunları önlemek için deneyin.

Eğer singletons önlemek yapamıyorsanız EDIT:, en azından bu duruma başvuru parametreleştirilmesi. Diğer bir deyişle, bir sınıf, onun kurucusuna veya Singleton kullanmak bu yöntemleri tekiz geçmek.

Sadece tekil için tüm kod temeli üzerinde göndermeler yapıyor izolasyon sınıfları test yeteneğinizi tehlikeye atar.

Lütfen Singleton'ın durum bilgisi varsa, testler aniden durum bilgisi olacak, ve testler "çağlayan başarısız" kendi önkoşulları başarısız önceki testlerle bozulabilir çünkü başlayabilirsiniz.