在PHP中替换子类中的函数时更改返回类型?

bob*_*obo 3 php overriding function return-type

这不好吗?或者这在PHP框架中很常见?

例如,在父类中,有一个save()函数,它返回数据库中受影响的行数.然后在子类中,我重写此函数以进行一些预验证,并且还想简单地返回成功/失败的布尔值.

Luk*_*man 5

我同意一致认为改变返回值的类型(甚至含义)是不好的.

这是一个例子,它将如何变坏:

假设您有一个接受字符串和'Writer'的函数:

function printThroughWriter(String $text, Writer $writer) {
    $count = $writer->write($text);
    print "Writer '".get_class($writer)."' printed $count characters.";
}
Run Code Online (Sandbox Code Playgroud)

这是最初的'作家'课程:

class Writer {
    public function write(String $text) {
        print $text;
        return strlen($text);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我们将'LazyWriter'传递给函数,该怎么办:

class LazyWriter extends Writer {
    public function write(String $text) {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

假设返回值Writer::write()是字符数printThroughWriter已被破坏,从而导致不一致.