2011-10-06 14 views
8

Sadece boş bir kurucu tanımlamak veya kurucu tanımını tamamen PHP'de bırakmak en iyisidir? Ben sadece tamamlama nedenleri için - herhangi bir şey yapmak için yapıcıya ihtiyacım olmasa bile, sadece return true; ile kurucuları tanımlama alışkanlığım var.PHP boş yapıcı

cevap

10

Kurucuya ihtiyacınız yoksa, daha fazla kod yazmanıza gerek yok. Yazdığınız zaman, boş bırakın ... geri dönen gerçek bir amacı yok.

1

yapıcı her zaman tanımlandığı sınıf örneğini döndürür. Bu nedenle, kurucunun içinde asla "dönüşü" kullanmazsınız. Son olarak, eğer onu kullanmıyorsan onu tanımlamamam daha iyi.

+0

Yapıcının dönüş değeri tamamen yok sayılır. – KingCrunch

+0

gerçekten de kurucunun içinde dönen birini bulduğumda onunla asla onun kodunu birleştirmeyeceğim. –

2

Nesneniz hiçbir zaman örneklenmemesi gerekiyorsa, yalnızca boş bir kurucu tanımlamanız gerekir. Bu durumda, __construct()'u özel yapın.

5

DÜZENLEME: PHP şimdi diğer oop programlama dilleri gibi davranır beri

önceki cevabı, artık geçerli değil. yapıcıları , arabirimlerin bir kısmı değildir. bu nedenle artık

Bunun tek istisnası herhangi bir sorun olmadan tercih bunları nasıl geçersiz kılmak için izin verilen geçerli:

interface iTest 
{ 
    function __construct(A $a, B $b, Array $c); 
} 

class Test implements iTest 
{ 
    function __construct(A $a, B $b, Array $c){} 
    // in this case the constructor must be compatible with the one specified in the interface 
    // this is something that php allows but that should never be used 
    // in fact as i stated earlier, constructors must not be part of interfaces 
} 

ÖNCEKİ ESKİ-GEÇERLİ DEĞİLDİR-ARTIK CEVAP: Orada

boş bir kurucu ile hiçbir kurucu arasında hiç bir önemli fark yoktur.

+0

Sadece bu değil, aynı zamanda 'A' tanımlı bir kurucuya ve 'B' tanımlı, boş bir yapıcıya sahip olsaydı, aslında kurucuyu kaldırıyor olsaydınız, ancak tamamen çıkarırsanız, üst öğeyi devralıyorsunuz demektir. yapıcı. Kesinti, "her zaman" ya da "asla" boş bir kurucuyu içermemeniz gerektiği ve bir ya da diğeriyle aynı şeyi "her zaman" anlamına gelmediğidir. Her şey bağlamla ilgili. – Jason

3

İki arasında bir fark var: Boş bir __construct() işlevini yazdığınızda, bir üst sınıftan kalıtsal __construct() üzerine yazabilirsiniz.

İhtiyacınız yoksa ve üst kurucunun açık bir şekilde üzerine yazmak istemiyorsanız, hiç yazma.