Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.11.2010, 02:30
Аватар для Golovastik
Профессор
Отправить личное сообщение для Golovastik Посмотреть профиль Найти все сообщения от Golovastik
 
Регистрация: 12.08.2010
Сообщений: 221

Переопределенные функции
Есть такое код:
Код:
<?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 раза, а не один класса-потомка?
Ответить с цитированием
  #2 (permalink)  
Старый 23.11.2010, 07:54
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Golovastik
Почему после этого $b->example();выводится 2 раза, а не один класса-потомка?
потому что вы вызываете метод класса-предка.
причем делаете это неправильно.
небходимо общатся через parent
Ответить с цитированием
  #3 (permalink)  
Старый 23.11.2010, 08:35
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Golovastik мне что ли вам книгу по PHP купить?
Ответить с цитированием
  #4 (permalink)  
Старый 23.11.2010, 18:28
Аватар для Golovastik
Профессор
Отправить личное сообщение для Golovastik Посмотреть профиль Найти все сообщения от Golovastik
 
Регистрация: 12.08.2010
Сообщений: 221

потому что вы вызываете метод класса-предка.

То есть написав вот так:
$b->example();

Это значит вызвать и предка и потомка, так как функции с идентичными названиями?
Ответить с цитированием
  #5 (permalink)  
Старый 24.11.2010, 00:49
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Golovastik,
вы что, совсем идиот?
реально, купите себе какую-нибудь книгу по PHP
и самое главное - читайте документацию.
там все вполне понятно написано. сам читал ее, и точно вам говорю, что там все заданные вами вопросы уже описаны.
Если не понимаете с первого раза, прочитайте еще раз соответствующий раздел справочника.
попробуйте написать тестовый код, для проверки механизма, если возникают сомнения.

Прежде чем задавать вопрос на форуме, повторить эту последовательность действий не менее 3х раз.
Если к третьему разу у вас так и не получилось понять механизм, и получить ответ на свой вопрос самостоятельно, то значит, либо вопрос и вправду нестандартный(что навряд ли), либо вы полный идиот.

Если вы зададите свой следующий вопрос, не потрудившись попытатся найти ответ самостоятельно, как я описал выше, то получите бан на 10 дней.


Ответ на ваш последний вопрос:
Сообщение от Golovastik
$b->example();
это вы вызываете метод example у объекта $b
так как объект $b является представителе класса B, то метод example ищется у него.
Так как он нашелся, то он и выполняется.
Если бы он не нашелся, то искался бы метод example у родительского класса - A
Итак, в вашем случае вызывается именно метод example, код которого описан в классе B
по-умолчанию PHP в таком случае НЕ будет вызывать метод example, код которого описан в классе A
но, вы вызываете его ПРИНУДИТЕЛЬНО, с помощью строки
A::example();

которую кстати, правильно писать так:
parent::example();
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21
Специфические функции и свойства различных браузеров onejsquestion Javascript под браузер 3 28.06.2010 10:54
Переменная как значение функции. Jurasmi Общие вопросы Javascript 7 22.04.2010 12:45
Подскажите, как работает простой код (замыкание функции)? Dotod Общие вопросы Javascript 5 02.12.2009 04:03
Возвращение значения из функции dba Events/DOM/Window 21 06.10.2009 01:33