2017-08-15 16 views
0

私は、戻り値によるメソッドで参照渡しメソッドをオーバーライドするのが悪いスタイルである理由を理解しています。 return-by-referenceメソッドによる値による戻り値のメソッドのオーバーライドはどうですか?私はPhpStormが前者を検出するが後では検出しないので尋ねる。PHP - 戻り値とBy-Refメソッドのオーバーライド

PhpStormは、「宣言はスーパーと互換性がある」としてSub :: baseReturnsByRefを呼び出します。

class Base { 
    function & baseReturnsByRef(&$something) { 
     return $something; 
    } 
} 

class Sub extends Base { 
    function baseReturnsByRef(&$something) { 
     return $something; 
    } 
} 

PhpStormが、これはOKかもしれない理由を説明OOまたは他のCS理論があり、次の...

class Base { 
    function baseReturnsByRef(&$something) { 
     return $something; 
    } 
} 

class Sub extends Base { 
    function & baseReturnsByRef(&$something) { 
     return $something; 
    } 
} 

にお母さんのですか?

答えて

1

PhpStormはまあ

後で元ではなく、を検出するので、私は尋ねる - PhpStormは同じものを PHP自体レポートません(PHP 7.0のように - 5.6 OKです。):

警告:サブの宣言:: baseReturnsByRef(& $の何かが)&ベースと互換性があります:: baseReturnsByRef(& $何か)

は、これは変更でなければなりません。 http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.error-handling.strict - 「相続時の署名の不一致」


これはOKかもしれない理由を説明OOまたは他のCS理論がありますか?

この部分に正しく(確実に)回答することはできません。

私の唯一の説明:関数のパラメータが値を受け取り、参照を渡すと、PHPは自動的にそれを参照しないようになります。

...パラメータに参照が必要な場合は、生の値を受け入れることができません。

同じロジックがここに適用される可能性があります。 2番目の例は、最初の例では実行できない間も戻り値が自動的に「参照されない」ためです。

関連する問題