Здравствуйте! Прошу помочь, самостоятельно не умею разобраться. В абстрактном классе GlobalClass создал метод isExists PHP: abstract class GlobalClass ... private $db; private $table_name; ... protected function __construct($table_name, $db) { $this->db = $db; /*объект класса DataBase*/ $this->table_name = $table_name; ... } /*По некоему полю проверить существует ли значение данного поля*/ protected function isExists($field, $value) { return $this->db->isExists($this->table_name, $field, $value); } В дочернем классе User (файл user_class.php) - метод isExists PHP: class User extends GlobalClass ... ... /*Проверить на существование логина*/ public function isExists($login) { return $this->isExists("login", $login); } Не пойму, почему IDE PHPStorm в файле user_class.php ругается: "Method call uses 2 parameters, but method signature uses 1 parameters Detects if function/method call uses more parameters than the declaration Options: Disable for functions/methods with last parameter $_ Ignores function with last parameter $_ in declaration Disable for functions/methods with func_get_arg/func_get_args call Ignores functions with "func_get_arg", "func_get_args" calls insid" В браузере выскочило сообщение: "Strict Standards: Declaration of User::isExists() should be compatible with GlobalClass::isExists($field, $value) in D:\OpenServer\domains\...\user_class.php on line 40" Пожалуйста, подскажите где ошибка.
Требуется писать PHP: class User extends GlobalClass ... ... /*Проверить на существование логина*/ public function isExists($field, $login) { return $this->isExists("login", $login); } ? Я правильно понял?
Ну я же цитатой выделил то,на чем нужно акцентировать внимание,что бы ты все не читал.Проблема в том,что когда переопределяешь метод,число и типы аргументов должны быть такими же как и были.Об этом тебя и уведомляет php
Чтоб перевести это, не надо знать английский. Достаточно трояка за школьный курс. Перекрывающий метод должен иметь одинаковую сигнатуру, php не поддерживает перегрузку функций а-ля C++. Вызов родительского - через parent::. Это - бесконечная рекурсия
ну это то условие выполнено --- Добавлено --- Как без рекурсии обойтись? --- Добавлено --- В школе изучал французский. На экзамене - 5. Уже месяц на Дуолинго учу английский
@Валерий Е я перевёл ошибку в гугле, чтобы удостовериться что в переводе нет проблем, так что как там на русском написано, теперь понятно в чём проблема? То что один метод с принимает 1 аргумент, а второй 2 аргумента.
Я заметил, что не одного. Многие на этом форуме неравнодушны к моей подписи. Я сам давно перевел в Яндексе. Кстати, ЯндексПереводчик нравится больше. Там функционал по-мощнее и из патриотических чувств. И понял, что аргументы в обоих методах должны полностью совпадать. Только ошибку самостоятельно не могу найти.
Решение вашей проблемы кроется в вашем вопросе, который задавался на други форумах тысячи раз: https://google.gik-team.com/?q=php+Как+правильно+вызвать+родительский+метод