2012-07-26 9 views
6

以下に示すように、子クラスのPHPメソッドをオーバーライドして、シグネチャのパラメータを変更できます。PHPの子クラスは、オーバーライドされたメソッドのパラメータを変更できますか?

class theParent { 
    function myMethod($param1) { 
    // code here 
    } 
} 

class theChild extends theParent { 
    function myMethod($param1, $param2) { 
    // code here 
    } 
} 

これをテストしたところ、問題なく動作し、エラーは発生しません。私の質問は、この悪い形ですか?またはOOPの基本的な教義?

親メソッドが抽象宣言されている場合、子シグネチャは逸脱することはできません。おそらく、これはインターフェイスのその側面を強制する必要がある場合に使用するメカニズムですか?

+1

。それが無効な構文であることは言うまでもありません... – nickb

+0

これは**上書き**と呼ばれています。子クラスがメソッドをオーバーライドしないようにするには、[final](http://php.net/manual/en/language.oop5.final.php)キーワードを使用します。 –

答えて

0

は限り

class theChild extends theParent { 
} 

としてそれはOOPの良い例です。

0

あなたが行ったことはオーバーライドと呼ばれ、何も悪いことではありませんが、子クラスを親のシグネチャに忠実にしたい場合は、以下のようにインターフェイスを使用してください。彼らは宣言されています。

interface theParent { 
     function myMethod($param1) ; 
    } 

    class theChild extends theParent { 
     function myMethod($param1) { 
     // code here 
     } 
    } 

は、それはあなたがそのメソッドのパラメータの親クラスの番号と一致しないことにより、厳しい基準のエラーメッセージがスローされます:)

関連する問題