Как правильнее переопределить метод родительского класса? Доброго времени суток.
На днях пытался написать свой "движок", и при написании классов столкнулся с следующей проблемой.Strict standards: Declaration of User::isExists() should be compatible with that of GlobalClass::isExists() in С:\...\mytest\lib\user_class.php on line 31
Названия родительского и дочернего класса абсолютно правильны. Единственное что прочитал, что нужно как-то дополнительно переопределить метод, т.е написанного мною public function __construct($db) {
parent::__construct("users", $db);
}
недостаточно.
Вот код поподробнее:require_once "global_class.php";
class User extends GlobalClass {
public function __construct($db) {
parent::__construct("users", $db);
}
public function isExists($login) {
return $this->isExists("login", $login);
}и его родитель:abstract class GlobalClass {
private $db;
private $table_name;
protected $config;
protected $valid;

protected function __construct($table_name, $db) {
$this->db=$db;
$this->table_name=$table_name;
$this->config=new Config();
$this->valid=new CheckValid();
}
....
protected function isExists($field, $value) {
return $this->db->isExists($this->table_name, $field, $value);
}
Буду очень признателен за помощь..а то уже уснуть сегодня не смог. И да, уже отправился подробнее учить ООП.

21 Авг 2019 в 07:09
168 +1
0
Ответы
1

Проблема возникает из-за того, что метод isExists() в дочернем классе User не совпадает по сигнатуре с методом isExists() в родительском классе GlobalClass. В дочернем классе User вы используете тот же самый метод isExists() для проверки существования пользователя, что и в родительском классе, что приводит к ошибке.

Для того, чтобы правильно переопределить метод isExists() в дочернем классе User, вам нужно изменить его название или сигнатуру. Например, вы можете переименовать метод в UserClass::isUserExists():

public function isUserExists($login) {
return $this->isExists("login", $login);
}

Таким образом, вы избежите конфликта и ошибки совместимости с родительским классом. Не забудьте также изменить места в коде, где вызывается данный метод, чтобы использовать новое название метода.

Надеюсь, это поможет вам решить проблему. Если у вас будут другие вопросы, не стесняйтесь обращаться. Удачи в изучении ООП!

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир