このLSP違反raises a Fatal Error:PHPでLSP違反が致命的で、時には警告が発生するのはなぜですか?
abstract class AbstractService { }
abstract class AbstractFactory { abstract function make(AbstractService $s); }
class ConcreteService extends AbstractService { }
class ConcreteFactory extends AbstractFactory { function make(ConcreteService $s) {} }
このLSP違反also raises a Fatal Error:
interface AbstractService { }
interface AbstractFactory { function make(AbstractService $s); }
class ConcreteService implements AbstractService { }
class ConcreteFactory implements AbstractFactory { function make(ConcreteService $s) {} }
ながら、このLSP違反のみraises a Warning:
class Service { }
class Factory { function make(Service $s) {} }
class MyService extends Service { }
class MyFactory extends Factory { function make(MyService $s) {} }
なぜ?彼らはすべて反禁忌であるので、彼らはすべて致命的ではありませんか?最初のケースで
私はメカニックに従いますが、私は理論的根拠を理解していません。 Zeevは5.0.0-rc2の制限を[Changelog](http://php.net/ChangeLog-5.php)に従って追加しましたが、それがLSPか他の理由かどうか、多型がPHP 4クラスでBCの関係をスキップしました。 – bishop
"PHPはあなたに鋭いオブジェクトを与え、気をつけなければあなたを傷つけることができます"。仰るとおり。私は時間の霧の中で理論的根拠が失われていると思う。 – bishop