2011-10-06 10 views
8

空のコンストラクタを定義するか、コンストラクタの定義を完全にPHPのままにしておくことをお勧めしますか?私はコンストラクタを定義する習慣がreturn true;だが、コンストラクタは何もする必要がなくても完了するためだ。PHPの空のコンストラクタ

答えて

10

コンストラクタを必要としない場合は、除外することをお勧めします。コードを書く必要はありません。あなたがそれを書いたら、それを空のままにしてください...真を返すことは目的を持っていません。

1

コンストラクタは常に、定義されたクラスのインスタンスを返します。したがって、コンストラクタ内では "return"を使用しません。最後に、あなたがgonaを使用していない場合は、それを定義しない方がいいです。

+0

コンストラクタの戻り値は完全に無視されます。 – KingCrunch

+0

実際に、コンストラクタの内側に戻ってきた人が見つかった場合、自分のコードを自分のものとマージすることは決してありません。 –

2

オブジェクトをインスタンス化しない場合は、空のコンストラクタを定義してください。その場合は__construct()を非公開にしてください。

5

EDIT:PHPは現在、他のオブジェクト指向プログラミング言語のように振る舞うので、

以前の答えは、もはや有効ではありません。 コンストラクタは、インターフェイスの一部ではありません。したがって、あなたが今、あなたは

いかなる問題もなく好むどのようにそれらを無効にするために許可されている唯一の例外は、次のとおりです。

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 
} 

OLD PREVIOUS-VALID NOT-もう答え:

が空のコンストラクタとコンストラクタがまったくない場合の重要な違いです。

class A{} 

class B extends A{ 
    function __construct(ArrayObject $a, DOMDocument $b){} 
} 

VS 

class A{ 
    function __construct(){} 
} 
class B extends A{ 
    function __construct(ArrayObject $a, DOMDocument $b){} 
} 

// error B::__construct should be compatible with A constructor 
+0

それだけでなく、 'A'に定義済みのコンストラクタがあり、' B'に定義済みの空のコンストラクタがある場合は、基本的にはコンストラクタを削除しますが、それを完全に残しておけば、親を継承しますコンストラクタ。結論は、空のコンストラクタを「常に」または「決して」含むべきではなく、どちらかを行うときに同じことを「常に」意味するわけではないということです。それはすべてコンテキストに関するものです。 – Jason

3

2つの違いがあります。空の__construct()関数を記述すると、親クラスから継承した__construct()を上書きします。

それを必要とせず、親コンストラクタを明示的に上書きしたくない場合は、まったく書き込まないでください。