2017-05-09 17 views
0

私は2つの古いextbase拡張AとBを2つ持っています。Ext BはAのPerson ModelとControllerを拡張し、showActionを上書きします。拡張モデルの名前は "Personcc"で、オリジナルモデルの名前は "Person"です。 showActionがPHP7で異なる宣言でメソッドが上書きされる

//show action in Controller of EXT A 
public function showAction(Vendor\Ext\Domain\Model\Person = $person) { 
    ... 
} 

//show action of extending controller:  
public function showAction(Vendor\Ext\Domain\Model\Personcc = $person) { 
    ... 
} 

のように見える今、私は彼らがPHP7と協力を得るために拡張を更新する必要があります。 PHP5では、このように動作しますが、PHP 7では動作しません。エラーは、宣言が "互換性がある"ことです。 Ext Bを完全に再構築する以外に何ができますか? PHP7と言う方法はありますか?「これを受け入れてください」?

(例のコードは少し抽象的ですが、問題は明確にする必要があり、それは全体の拡張を介して行く。これを克服するのは良いアイデアがなければ、私は拡張子が完全に再加工することが必要だと思います。)

+2

参照:http://stackoverflow.com/questions/36079651/silence-declaration-should-be-compatible-warnings-in-php-7 –

答えて

0

あなたはLiskov Substitution Principleを破っています。オブジェクト指向設計に関しては、これは非常に悪いことです。簡単に言えば、オブジェクトを持っていれば、そのオブジェクトを使う場所はどこでも、そのオブジェクトのサブクラスを使うことができます。

intended to guarantee semantic interoperabilityです。言い換えれば、それはあなたの時間を節約することを意図しており、仲間のプログラマーはあなたのプログラムを理解するのに時間を費やしています。あなたの仲間のプログラマーだけでなく、まれなエラーからあなたを守ることで、自分の人生を楽にする静的アナライザーのようなすべてのツール。

コードが共通オブジェクトの特定のサブタイプのみで動作する必要があると考える場合、これは関数の署名に属さない制約です。それをアサーションや例外のように関数の本体に移動し、移動します。

関連する問題