Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> self и дочерние классы 
V
    Опции темы
barcelona
Дата 16.12.2009, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 21.4.2007

Репутация: нет
Всего: нет



Здравствуйте!
Код такой:
Код

class ParentClass {
  public static function method1() {
    ...
  }

  function method2() {
    ...

    self::method1();
  }
}

class ChildClass extends ParentClass {
  public static function method1() {
    ...
  }
}

$a = new ChildClass();
$a->method2();

Можно ли сделать так, чтобы в методе method2 экземпляра a вызывался method1 класса ChildClass, а не ParentClass?

Это сообщение отредактировал(а) barcelona - 16.12.2009, 18:12
PM MAIL   Вверх
patap
Дата 16.12.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 26
Всего: 40



Код
  class ParentClass {
  public static function method1() {
    echo 'me parent';
  }

  function method2() {
    ChildClass::method1();
  }
}

class ChildClass extends ParentClass {
  public static function method1() {
    echo 'me child';
  }
}

$a = new ChildClass();
$a->method2();



--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
barcelona
Дата 17.12.2009, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 21.4.2007

Репутация: нет
Всего: нет



patap, я не могу править ParentClass, что есть, то есть, а в нём формулировка с self. Неужели остаётся только переопределить метод method2() в дочернем классе?
PM MAIL   Вверх
brother79
Дата 17.12.2009, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: 2
Всего: 6



Ну вообще-то он и на self работать должен. Я что-то никогда не задумывался, что там что-то кроме self надо указывать, нормально классы наследуются и по self вызывается последний, ключевой момент в этом примере 

Цитата(patap @  16.12.2009,  18:33 Найти цитируемый пост)
$a = new ChildClass();
$a->method2();




--------------------
PM MAIL WWW   Вверх
barcelona
Дата 17.12.2009, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 21.4.2007

Репутация: нет
Всего: нет



brother79, нет, не работает. Скопируйте, вставьте, запустите код
Код

    class ParentClass {
      public static function method1() {
        echo 'me parent';
      }
    
      function method2() {
        self::method1();
      }
    }
    
    class ChildClass extends ParentClass {
      public static function method1() {
        echo 'me child';
      }
    }

    $a = new ChildClass();
    $a->method2();

Выводится me parent.

Это сообщение отредактировал(а) barcelona - 17.12.2009, 09:53
PM MAIL   Вверх
comcon1
Дата 17.12.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: нет
Всего: 17



Да.. Если метод не статический, то по $this->method1 - будет вызван метод с учетом виртуальности. То есть метод последнего класса, по чьему экземпляру был создан объект. Если объект создан по родительскому классу, то вызовется метод родителя. Если по ребёночьему классу - метод ребенка. Тебе обязательно статический метод?


--------------------
PM MAIL   Вверх
capitan
Дата 17.12.2009, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



barcelona, а почему не хотите переопределить его в ChildClass, как и хотели?
Код

   class ParentClass {
      public static function method1() {
        echo 'me parent';
      }
    
      function method2() {
        self::method1();
      }
    }
    
    class ChildClass extends ParentClass {
      public static function method1() {
        echo 'me child';
      }
      
      function method2() {
        self::method1();
      }
    }
    
    ChildClass::method2(); // me child


Это сообщение отредактировал(а) capitan - 17.12.2009, 14:49
PM MAIL WWW ICQ   Вверх
barcelona
Дата 17.12.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 21.4.2007

Репутация: нет
Всего: нет



capitan, наверное, дейсвительно придётся тащить метод в дочерний класс. Он у меня здоровый, но что делать...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.