| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Переопределенные функции |
| Автор: Golovastik 23.11.2010, 02:39 | ||
Есть такое код:
Здесь создан класс А и его наследник класс B, в классе А объявлен метод с названием example и в классе B такой же метод объявлен. Когда я написал так: A::example(); Я просто через глобальную область видимости к классу вызывал ег о метод, это вроде понятно,но после вот этого: $b->example(); Вызывался метод из класса-потомка, а потом вызвался метод класса родителя после него, почему это так? Почему после этого $b->example();выводится 2 раза, а не один класса-потомка? |
| Автор: Golovastik 23.11.2010, 02:49 |
| Вы не поняли $b->example(), один раз написал ,а вывелось и родителя и потомка,почему? |
| Автор: Guedda 23.11.2010, 11:29 | ||
Потому что у Вас в методе потомка есть надпись A::example(); Если ее убрать, то выведется только метод потомка ;) |
| Автор: skyboy 23.11.2010, 11:54 | ||
| у тебя страшныйнекорректный код, я удивляюсь, как оно вообще работает разработчики РНР вообще не прикрыли лавочку со статическим вызовом нестатических методов. тут http://ua2.php.net/manual/en/language.oop5.paamayim-nekudotayim.php:
работает только потому, что в A::example() нет обращения к $this. впрочем, РНР должен все равно ругаться, видимо, у тебя отключен вывод ошибок на экран - потому ругань остается только в логах |
| Автор: NewDima 23.11.2010, 17:33 |
| skyboy, с чего ему ругаться? =) в коде все честно |
| Автор: skyboy 23.11.2010, 17:56 | ||||||
статический вызов нестатического метода.
приводит к
потому что вместо "A::example()" должно быть "parent::example()" Добавлено через 3 минуты и 32 секунды
это к слову про логи и "невыведенные на экран сообщения" |