За последние 24 часа нас посетил 35421 программист и 1814 роботов. Сейчас ищут 822 программиста ...

Как правильно вызвать родительский метод?

Тема в разделе "PHP для новичков", создана пользователем Валерий Е, 26 мар 2017.

  1. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Здравствуйте! Прошу помочь, самостоятельно не умею разобраться.
    В абстрактном классе GlobalClass создал метод isExists
    PHP:
    1. abstract class GlobalClass ...
    2. private $db;
    3. private $table_name;
    4. ...
    5. protected function __construct($table_name, $db)
    6. {
    7.     $this->db = $db; /*объект класса DataBase*/
    8.     $this->table_name = $table_name;
    9.    ...
    10. }
    11. /*По некоему полю проверить существует ли значение данного поля*/
    12.     protected function isExists($field, $value)
    13.     {
    14.         return $this->db->isExists($this->table_name, $field, $value);
    15.     }
    В дочернем классе User (файл user_class.php) - метод isExists
    PHP:
    1. class User extends GlobalClass ...
    2. ...
    3. /*Проверить на существование логина*/
    4.     public function isExists($login)
    5.     {
    6.         return $this->isExists("login", $login);
    7.     }
    Не пойму, почему 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"
    Пожалуйста, подскажите где ошибка.
     
  2. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    https://secure.php.net/manual/ru/language.oop5.basic.php
     
    Валерий Е нравится это.
  3. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Суть в этом
     
  4. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Требуется писать
    PHP:
    1. class User extends GlobalClass ...
    2. ...
    3. /*Проверить на существование логина*/
    4.     public function isExists($field, $login)
    5.     {
    6.         return $this->isExists("login", $login);
    7.     }
    ? Я правильно понял?
     
  5. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
  6. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Ну я же цитатой выделил то,на чем нужно акцентировать внимание,что бы ты все не читал.Проблема в том,что когда переопределяешь метод,число и типы аргументов должны быть такими же как и были.Об этом тебя и уведомляет php
     
    Валерий Е нравится это.
  7. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    По-русски можно? Я не знаю иностранного;)
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Чтоб перевести это, не надо знать английский. Достаточно трояка за школьный курс.

    Перекрывающий метод должен иметь одинаковую сигнатуру, php не поддерживает перегрузку функций а-ля C++. Вызов родительского - через parent::.

    Это - бесконечная рекурсия
     
    Валерий Е нравится это.
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  10. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    ну это то условие выполнено
    --- Добавлено ---
    Как без рекурсии обойтись?
    --- Добавлено ---
    В школе изучал французский. На экзамене - 5. Уже месяц на Дуолинго учу английский
     
  11. alhimovsergejj

    alhimovsergejj Новичок

    С нами с:
    27 мар 2017
    Сообщения:
    3
    Симпатии:
    0
    плохо учите видимо, не так углубленно
     
  12. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    плохо, или неплохо, а восьмой уровень прошел
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @Валерий Е я перевёл ошибку в гугле, чтобы удостовериться что в переводе нет проблем, так что как там на русском написано, теперь понятно в чём проблема? То что один метод с принимает 1 аргумент, а второй 2 аргумента.
     
  14. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Меня одного смущает реферальная ссылка в подписи топикстартера на очередную поповщину?
     
  15. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Я заметил, что не одного. Многие на этом форуме неравнодушны к моей подписи.
    Я сам давно перевел в Яндексе. Кстати, ЯндексПереводчик нравится больше. Там функционал по-мощнее и из патриотических чувств. И понял, что аргументы в обоих методах должны полностью совпадать. Только ошибку самостоятельно не могу найти.
     
  16. c8lkid

    c8lkid Новичок

    С нами с:
    24 ноя 2016
    Сообщения:
    6
    Симпатии:
    1