PHP - 返回 By-Value & By-Ref 方法覆盖



我理解为什么用按值返回方法覆盖按引用返回方法可能是不好的风格。 如何用按引用返回方法重写按值返回方法? 我问是因为 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理论可以解释为什么这可能是可以的?

我问是因为 PhpStorm 检测到前者而不是后者

好吧 - PhpStorm 做了同样的事情 PHP本身报告(从 PHP 7.0 开始 - 5.6. 是可以的(:

警告:Sub::baseReturnsByRef(&$something(

的声明应与 & Base::baseReturnsByRef(&$something( 兼容

这必须是更改: http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.error-handling.strict -- "继承期间签名不匹配">


是否有OO或其他CS理论可以解释为什么这可能是可以的?

无法正确(可靠地(回答此部分。

我唯一的解释:如果函数参数接受值并且您传递引用......它将起作用,因为 PHP 会自动为您"取消引用"它。

但。。。如果参数需要引用...然后它不能接受原始值。

此处可能应用相同的逻辑:第二个示例是可以的,因为返回值仍然可以自动"取消引用",而在第一个示例中无法完成。

最新更新