PHP - 按值返回& By-Ref方法覆盖

时间:2017-08-15 23:55:25

标签: php phpstorm

我理解为什么使用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理论解释了为什么这可能没问题?

1 个答案:

答案 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会自动“取消引用”它。

但是......如果参数需要引用...那么它就不能接受原始值。

这里可能会应用相同的逻辑:第二个例子没问题,因为在第一个例子中无法完成返回值仍然可以“未引用”。