目次一覧
問題発生 / エラー原因 / エラー対応例 1
問題発生
エラーメッセージ
( ! ) Warning: Declaration of BtweetRepository::fetchAll($offset, $limit) should be compatible with DbRepository::fetchAll($sql, $params = Array) in /var/www/xxx.php on line 511
エラーが発生したコード
abstract class DbRepository
{
public function fetchAll($sql, $params = array())
{
}
}
class BtweetRepository extends DbRepository
{
public function fetchAll($offset,$limit)
{
}
}
エラー原因
オーバーライドしている子クラスメソッドのシグネチャが、親クラスメソッドのシグネチャと互換性がないから
シグネチャの互換性に関するルール
メソッドをオーバーライドするときは、 子クラスのシグネチャが親クラスのそれと互換性がなければいけません。 互換性が壊れた場合、致命的なエラーが発生します。
PHP: クラスの基礎メソッドをオーバーライドするときは、 子クラスのシグネチャが親クラスのそれと互換性がなければいけません。 互換性が壊れた場合、致命的なエラーが発生します。
エラー対応例 1
オーバーライドしている子クラスメソッドのシグネチャを、親クラスメソッドのシグネチャと互換性があるように変更する
子クラスメソッドの引数を修正したコード
class BtweetRepository extends DbRepository
{
public function fetchAll($sql, $params = array())
{
}
}
エラー対応例 2
エラー対応例 2
オーバーライドを取り止める
具体的には、子クラスメソッド名を変更する
子クラスメソッド名を変更したコード
class BtweetRepository extends DbRepository
{
public function fetchAllBT($offset,$limit)
{
}
}
Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
( ! ) Warning: file_put_contents(/a/b.jpg): failed to open stream: No such file or directory in