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 の時点で、次のエラーが発生しています。
非推奨: の戻り値の型は
Repository\MySql\MySql::query($sql, $resultmode = null)
と互換性があるmysqli::query(string $query, int $result_mode = MYSQLI_STORE_RESULT): mysqli_result|bool
か、30 行目#[\ReturnTypeWillChange]
の通知を一時的に抑制するために属性を使用する必要がありますrepository\src\MySql\MySql.php
エラーを修正する方法はわかっています。独自のカスタム オブジェクトを返したいので、おそらくメソッドの名前を変更することになるでしょう。
質問
おそらく言語理論を使用したり、他の言語と比較したりして、理論的およびオブジェクト指向の観点からこの変更の必要性を捉えた答えを探しています。
なぜこの変更が必要だったのですか?この変更を行う必要性または理由は何でしたか? クラスを拡張するときにPHPでオーバーロードされた戻り値の型を許可する方法は何ですか?