Как правильнее переопределить метод родительского класса? Доброго времени суток. На днях пытался написать свой "движок", и при написании классов столкнулся с следующей проблемой.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); } Буду очень признателен за помощь..а то уже уснуть сегодня не смог. И да, уже отправился подробнее учить ООП.
Проблема возникает из-за того, что метод isExists() в дочернем классе User не совпадает по сигнатуре с методом isExists() в родительском классе GlobalClass. В дочернем классе User вы используете тот же самый метод isExists() для проверки существования пользователя, что и в родительском классе, что приводит к ошибке.
Для того, чтобы правильно переопределить метод isExists() в дочернем классе User, вам нужно изменить его название или сигнатуру. Например, вы можете переименовать метод в UserClass::isUserExists():
public function isUserExists($login) { return $this->isExists("login", $login); }
Таким образом, вы избежите конфликта и ошибки совместимости с родительским классом. Не забудьте также изменить места в коде, где вызывается данный метод, чтобы использовать новое название метода.
Надеюсь, это поможет вам решить проблему. Если у вас будут другие вопросы, не стесняйтесь обращаться. Удачи в изучении ООП!
Проблема возникает из-за того, что метод isExists() в дочернем классе User не совпадает по сигнатуре с методом isExists() в родительском классе GlobalClass. В дочернем классе User вы используете тот же самый метод isExists() для проверки существования пользователя, что и в родительском классе, что приводит к ошибке.
Для того, чтобы правильно переопределить метод isExists() в дочернем классе User, вам нужно изменить его название или сигнатуру. Например, вы можете переименовать метод в UserClass::isUserExists():
public function isUserExists($login) {return $this->isExists("login", $login);
}
Таким образом, вы избежите конфликта и ошибки совместимости с родительским классом. Не забудьте также изменить места в коде, где вызывается данный метод, чтобы использовать новое название метода.
Надеюсь, это поможет вам решить проблему. Если у вас будут другие вопросы, не стесняйтесь обращаться. Удачи в изучении ООП!