我像这样重载query
了类的方法mysqli
:
class MySql extends \mysqli
{
function query(string $sql): ?MySqlResult // line #30
{
$result = parent::query($sql);
return new MySqlResult($result);
}
}
在 PHP8.0 中这不是问题。但是,从 PHP8.1 开始,我现在收到此错误:
已弃用:返回类型 of
Repository\MySql\MySql::query($sql, $resultmode = null)
应与 兼容mysqli::query(string $query, int $result_mode = MYSQLI_STORE_RESULT): mysqli_result|bool
,或者#[\ReturnTypeWillChange]
应使用该属性暂时抑制第repository\src\MySql\MySql.php
30 行中的通知
我知道如何修复错误——我可能最终会更改方法的名称,因为我想返回一个我自己的自定义对象。
问题
我正在寻找一个从理论和面向对象的角度捕捉这种变化需求的答案,可能使用语言理论,或者将其与其他语言进行比较。
为什么这个改变是必要的?进行此更改的需要或原因是什么?扩展类时,有什么方法可以在 PHP 中允许重载返回类型?