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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переопределенные функции 
:(
    Опции темы
Golovastik
Дата 23.11.2010, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть такое код:
Код

<?php
class A {
     function example() {
         echo "Это первоначальная функция A::example().<br>";
     }
}

class B extends A {
     function example() {
         echo "Это переопределенная функция B::example().<br>";
         A::example();
     }
}


A::example();

// Создаем объект класса B.
$b = new B;

$b->example();
?>


Здесь создан класс А и его наследник класс B, в классе А  объявлен метод с названием example и в классе B такой же метод объявлен.

Когда я написал так: A::example();
Я просто через глобальную область видимости к классу вызывал ег о метод, это вроде понятно,но после вот этого:
$b->example();
Вызывался метод из класса-потомка, а потом вызвался метод класса родителя после него, почему это так?
Почему после этого $b->example();выводится 2 раза, а не один класса-потомка?

PM MAIL   Вверх
SickFxck
Дата 23.11.2010, 02:45 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Golovastik @  23.11.2010,  02:39 Найти цитируемый пост)
Вызывался метод из класса-потомка, а потом вызвался метод класса родителя после него, почему это так?

Почему я написал
Код
<?php
echo 'A';

и вывелось "A"? Вот и с твоим кодом тоже самое.

Это сообщение отредактировал(а) SickFxck - 23.11.2010, 02:46
PM MAIL   Вверх
Golovastik
Дата 23.11.2010, 02:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вы не поняли $b->example(), один раз написал ,а вывелось и родителя и потомка,почему?

Это сообщение отредактировал(а) Golovastik - 23.11.2010, 02:49
PM MAIL   Вверх
Guedda
Дата 23.11.2010, 11:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

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



Цитата(Golovastik @  23.11.2010,  02:49 Найти цитируемый пост)
Вы не поняли $b->example(), один раз написал ,а вывелось и родителя и потомка,почему?

Потому что у Вас в методе потомка есть надпись A::example(); Если ее убрать, то выведется только метод потомка ;)


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
skyboy
Дата 23.11.2010, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



у тебя страшныйнекорректный код, я удивляюсь, как оно вообще работает разработчики РНР вообще не прикрыли лавочку со статическим вызовом нестатических методов.
Цитата(Golovastik @  23.11.2010,  01:39 Найти цитируемый пост)
A::example();

тут должно быть :
Код

parent::example();

работает только потому, что в A::example() нет обращения к $this. впрочем, РНР должен все равно ругаться, видимо, у тебя отключен вывод ошибок на экран - потому ругань остается только в логах

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

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



skyboy, с чего ему ругаться? =) в коде все честно
PM ICQ   Вверх
skyboy
Дата 23.11.2010, 17:56 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



статический вызов нестатического метода.
Код

<?php
class A {
    $a = '1';
     function example() {
         echo $this->a;
     }
}
class B extends A {
     function example() {
         echo $this->a;
         A::example();
     }
}
A::example();
// Создаем объект класса B.
$b = new B;
$b->example();
?>

приводит к 
Цитата

Fatal error:  Using $this when not in object context

потому что вместо "A::example()" должно быть "parent::example()"

Добавлено через 3 минуты и 32 секунды
Цитата(php.net/manual/en/language.oop5.static.php)

Calling non-static methods statically generates an E_STRICT level warning. 

это к слову про логи и "невыведенные на экран сообщения"
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.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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