Questa violazione LSP raises a Fatal Error:Perché le violazioni LSP in PHP a volte sono fatali ea volte gli avvisi?
abstract class AbstractService { }
abstract class AbstractFactory { abstract function make(AbstractService $s); }
class ConcreteService extends AbstractService { }
class ConcreteFactory extends AbstractFactory { function make(ConcreteService $s) {} }
Questa violazione 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) {} }
Mentre questa violazione LSP solo raises a Warning:
class Service { }
class Factory { function make(Service $s) {} }
class MyService extends Service { }
class MyFactory extends Factory { function make(MyService $s) {} }
Perché? Non dovrebbero essere tutti fatali dal momento che sono tutti controversi?
seguo la meccanica, ma non capisco la logica. Zeev ha aggiunto la restrizione in 5.0.0-rc2 secondo [Changelog] (http://php.net/ChangeLog-5.php), ma non mi è chiaro se fosse per LSP o per un altro motivo e se polimorfo è -le relazioni sono state ignorate per BC con classi PHP 4. – bishop
"PHP ti offre oggetti nitidi e ti fa male se non stai attento". Così vero. Suppongo che la logica si perda nella notte dei tempi. – bishop