我理解为什么使用return-by-value方法覆盖引用返回方法可能不好。如何用引用返回方法覆盖返回值方法?我问,因为PhpStorm检测到前者而不是后者。
PhpStorm将Sub :: baseReturnsByRef称为“声明应该与super兼容。”
class Base {
function & baseReturnsByRef(&$something) {
return $something;
}
}
class Sub extends Base {
function baseReturnsByRef(&$something) {
return $something;
}
}
PhpStorm对以下内容表示不满......
class Base {
function baseReturnsByRef(&$something) {
return $something;
}
}
class Sub extends Base {
function & baseReturnsByRef(&$something) {
return $something;
}
}
是否有OO或其他CS理论解释了为什么这可能没问题?
答案 0 :(得分:1)
我问,因为PhpStorm检测到前者而不是后者
嗯 - PhpStorm与 PHP本身报告相同(从PHP 7.0到5.6。可以):
警告:Sub :: baseReturnsByRef(& $ something)的声明应该与&基:: baseReturnsByRef(安培; $东西)
这必须是改变: http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.error-handling.strict - “继承期间签名不匹配”
是否有OO或其他CS理论解释了为什么这可能没问题?
无法正确(可靠)回答此部分。
我唯一的解释是:如果函数参数接受值并且您传递了引用..它将起作用,因为PHP会自动“取消引用”它。
但是......如果参数需要引用...那么它就不能接受原始值。
这里可能会应用相同的逻辑:第二个例子没问题,因为在第一个例子中无法完成返回值仍然可以“未引用”。