我無法弄清楚爲什麼這段代碼在PHP中不起作用?用子接口覆蓋方法參數作爲新參數
<?php
interface Engine {
function run();
}
interface HydroEngine extends Engine {
function run();
}
interface Car {
function setEngine(Engine $engine);
}
interface WaterCar extends Car {
function setEngine(HydroEngine $engine);
}
?>
它似乎不會破壞任何OOP規則,但它爲什麼會給我一個錯誤?
Fatal error: Declaration of WaterCar::setEngine() must be compatible with Car::setEngine(Engine $engine)
可能是我之前誤解了LSP ..但我認爲Java允許你做這件事(我錯了?) – pleerock
不知道。 PHP不。 :)我希望解釋爲什麼對你有意義。 – deceze
是的,謝謝。我在考慮''HydroEngine'確實與* Engine完全相同或更多*然後'Engine' - 這就是爲什麼它可以接受lsp,但現在您的解釋確實有意義 – pleerock