Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: вопрос о перезаписке методов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
dadli
Отправлено: 22 Апреля, 2012 - 12:19:53
Post Id



Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Май 2011  
Откуда: тифилис


Помог: 5 раз(а)




здравствуите
вот если написать так

PHP:
скопировать код в буфер обмена
  1. class a {
  2.         public $a1;
  3.         public $a2;
  4.        
  5.         function suma() {
  6.                 $this->a1 = 1;
  7.                 $this->a2 = 2;
  8.                 echo $this->a1 + $this->a2;
  9.         }
  10. }
  11.  
  12. class b extends a {
  13.         function suma() {
  14.                 parent::suma();
  15.         }
  16. }
  17.  
  18. $obj = new b();
  19. $obj->suma();


то метод переписивается в класе "b" полностю, то есть виведить резултат напрямую.
но если в классе "а" напишим не
echo $this->a1 + $this->a2;
а
return $this->a1 + $this->a2;
то в классе наследнике, в методе suma() тоже обязателно написать return $this->a1 + $this->a2; толко перезаписка метода parent::suma(); не помогает так как
PHP:
скопировать код в буфер обмена
  1. $obj = new b();
  2. echo $obj->suma();.

не виведит ничего.
в калссе наследнике, тоже нужно написать: return
почему?

(Отредактировано автором: 22 Апреля, 2012 - 12:24:32)

 
 Top
Okula
Отправлено: 22 Апреля, 2012 - 12:36:30
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Дочерний класс наследует все методы и свойства родительского класса, которым объявлено свойство public или protected.
У вас неправильное понимание наследования и соответсвенно неправильный пример.
Должно быть так:
PHP:
скопировать код в буфер обмена
  1. class a {
  2.     public $a1, $a2;
  3.    
  4.     function suma() {
  5.         $this->a1 = 1;
  6.         $this->a2 = 2;
  7.         echo $this->a1 + $this->a2;
  8.     }
  9. }
  10.  
  11. class b extends a { }
  12.  
  13. $b = new b();
  14. $b->suma();
 
 Top
ams
Отправлено: 22 Апреля, 2012 - 12:37:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 351
Дата рег-ции: Нояб. 2010  


Помог: 13 раз(а)




return parent::suma();
(Добавление)
Думаю человек хочет расширить метод родителя, и тестит... Улыбка
 
 Top
Мелкий Супермодератор
Отправлено: 22 Апреля, 2012 - 12:42:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Нужно в b писать:


Т.к. вызов parent::suma() возвращает значение в этот метод, как самая обычная функция.


-----
PostgreSQL DBA
 
 Top
dadli
Отправлено: 22 Апреля, 2012 - 14:52:17
Post Id



Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Май 2011  
Откуда: тифилис


Помог: 5 раз(а)




Okula
ams пишет:
Думаю человек хочет расширить метод родителя, и тестит

да именно, хотел раcширит перезаписни метод в класе наследнике, трeнирую, сеичас учуУлыбка

Мелкий
спасибо, дохадчиво


спасибо балшои всем

(Отредактировано автором: 22 Апреля, 2012 - 14:52:53)

 
 Top
snikers987
Отправлено: 22 Апреля, 2012 - 22:32:05
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




А называется сие перегрузка методов.


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
OrmaJever Модератор
Отправлено: 23 Апреля, 2012 - 01:07:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




dadli Ну блин, а почему вот в таком коде
PHP:
скопировать код в буфер обмена
  1. function a() {
  2.   $arr = array( ... );
  3.   return count($arr);
  4. }

писать return count($arr)? По вашей логике можно написать count($arr), ведь у count уже есть return. Родительский метод теперь совсем другой, у него свой return у наследника свой, и родительский метод вызывается просто как функция из функции.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB