Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2010, 18:25   #1
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию Полиморфизм в пхп

Почему в 3 случаи выводится строка: "Функция производного класса ", ведь здесь:
PHP код:
$d->base_funct(); 
через объект d производного классса Derivative вызывается функция base_funct() которая находится в базовом классе, этот вызов должен выводить Функция базового класса ведь вызывается в функции base_funct() функция funct(); базового класса?

PHP код:
<?php
class Base {
 function 
funct() {
 echo 
"<h2>Функция базового класса</h2>";
 }
 function 
base_funct() {
 
$this->funct();
 }
}

class 
Derivative extends Base {
 function 
funct() {
 echo 
"<h3>Функция производного класса</h3>";
 }
}

$b = new Base();
$d = new Derivative();

$b->base_funct();
$d->funct();
$d->base_funct();
// Скрипт выводит:

// Функция базового класса
// Функция производного класса
// Функция производного класса
?>
Golovastik вне форума Ответить с цитированием
Старый 02.07.2010, 20:40   #2
werewolf999
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 46
По умолчанию

все дело в том что псевдопеременная $this используется для обращения к текущему объекту (а d - объект класса Derivative, где funct была переопределена)
но есть ключевое слово self, которое обращается к текущему классу
то есть чтобы в третьем случае выводилось Функция базового класса, нужно изменить base_funct

PHP код:
function base_funct() {
   
self::funct();


Последний раз редактировалось werewolf999; 02.07.2010 в 21:13. Причина: дополнения
werewolf999 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полиморфизм mister2010 Общие вопросы C/C++ 30 24.05.2010 01:07
Полиморфизм, наследование и деструкторы alex_triton Общие вопросы C/C++ 1 08.11.2009 17:52
Полиморфизм и виртуальные методы Викдон Общие вопросы Delphi 1 02.02.2009 04:40
Полиморфизм. Пример. Scratch Общие вопросы C/C++ 53 28.09.2008 18:46