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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
armancho7777777 Супермодератор
Отправлено: 27 Марта, 2012 - 19:59:16
Post Id



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


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


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




Всем привет!
Решил основательно взяться за ООП.

Вот простой пример:

PHP:
скопировать код в буфер обмена
  1.  
  2. class Tayota {
  3.  
  4.     public function model_t()
  5.         {
  6.            return 'Тайота';    
  7.         }
  8.        
  9. }
  10.  
  11.  
  12.  
  13. class Mersedes extends Tayota {
  14.  
  15.     public function model_m()
  16.         {
  17.            return 'Мерседес';  
  18.         }
  19.        
  20. }
  21.  
  22.  
  23. class Auto extends Mersedes {
  24.  
  25.         public function auto()
  26.         {
  27.             return 'Авто';
  28.         }
  29.        
  30. }
  31.  
  32.  
  33.  
  34. class Controler extends Auto {
  35.        
  36.         public function all()
  37.         {
  38.             return 'Контролер';
  39.         }
  40.        
  41. }
  42.  
  43. $controler = new Controler();
  44.  
  45.  


Хочу сделать следующее:
есть основной класс 'Controler', который виден во всех файлах сайта.
Далее, решил, на пример, добавить новый класс, расширив основной":

Затем ещё один:

Потом ешё:


Вопрос: как во всём этом не запутаться?

т.е. как не ошибиться, какой класс надо будет в дальнейшем расширить,
что бы всё перешло к основному родительскому классу, в данном случае 'Controler'.

(Отредактировано автором: 27 Марта, 2012 - 19:59:59)

 
 Top
Мелкий Супермодератор
Отправлено: 27 Марта, 2012 - 20:12:11
Post Id



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


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


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




armancho7777777 пишет:
что бы всё перешло к основному родительскому классу, в данном случае 'Controler'.

Всё совсем наоборот в коде.


-----
PostgreSQL DBA
 
 Top
armancho7777777 Супермодератор
Отправлено: 27 Марта, 2012 - 20:13:36
Post Id



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


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


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




Мелкий, покажите пожалуйста как правильно Растерялся
 
 Top
Bio man
Отправлено: 27 Марта, 2012 - 20:13:38
Post Id


Постоянный участник


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


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




Controller это не родительский а дочерний класс! Смысл наследования сделать код меньше, переопределяя некоторый код родителя, в твоем же примере класс только расширяет но не переопределяет, тогда встает вопрос - зачем наследовать? Если нужно работать с каким то классом в каком то классе, когда по функциональности классы не связаны то не логичнее использовать композицию или агрегацию?
 
 Top
armancho7777777 Супермодератор
Отправлено: 27 Марта, 2012 - 20:17:26
Post Id



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


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


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




Покажите на моём примере как правильно пожалуйста.
Мне надо, что бы все классы, которые я добавляю, были дочерними контролёра.
То есть после чего объявляю экземпляр родительского класса:

и получаю доступ ко всем публичным методам и свойствам всех классов.

(Отредактировано автором: 27 Марта, 2012 - 20:19:39)

 
 Top
Bio man
Отправлено: 27 Марта, 2012 - 20:17:57
Post Id


Постоянный участник


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


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




armancho7777777 пишет:
Вопрос: как во всём этом не запутаться?
Код нужно документировать, что является хорошим тоном программирования.
 
 Top
armancho7777777 Супермодератор
Отправлено: 27 Марта, 2012 - 20:18:19
Post Id



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


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


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




Bio man пишет:
Смысл наследования сделать код меньше, переопределяя некоторый код родителя

Покажите пожалуйста как.
Заранее спасибо.

Bio man пишет:
код нужно документировать, что является хорошим тоном программирования.

Ну это само собой.

(Отредактировано автором: 27 Марта, 2012 - 20:19:16)

 
 Top
Bio man
Отправлено: 27 Марта, 2012 - 20:19:39
Post Id


Постоянный участник


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


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




armancho7777777 пишет:
и получаю доступ ко всем публичным методам и свойствам всех классов.
еще раз, в вашем случае не нужно наследовать, т.к. работать с публичными данными можно без наследования.
 
 Top
armancho7777777 Супермодератор
Отправлено: 27 Марта, 2012 - 20:21:07
Post Id



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


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


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




Bio man пишет:
т.к. работать с публичными данными можно без наследования.

Как, если я объявляю только это:


В общем, как сделать все классы дочерними одного, в данном случае "Controler"а?

(Отредактировано автором: 27 Марта, 2012 - 20:27:18)

 
 Top
Bio man
Отправлено: 27 Марта, 2012 - 20:29:37
Post Id


Постоянный участник


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


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




armancho7777777 пишет:
Ну это само собой.
Если само собой, то зачем тему создавать?
такой код имеет больше смысла
Спойлер (Отобразить)

(Отредактировано автором: 27 Марта, 2012 - 20:30:53)

 
 Top
armancho7777777 Супермодератор
Отправлено: 27 Марта, 2012 - 20:31:21
Post Id



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


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


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




Bio man пишет:
Если само собой, то зачем тему создавать?

Я про комментарии.
 
 Top
Bio man
Отправлено: 27 Марта, 2012 - 20:33:39
Post Id


Постоянный участник


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


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




armancho7777777 пишет:
Я про комментарии.
Ну "комментарии" это ответ на изначальный вопрос, вопрос про наследование встал уже позже.
 
 Top
tato
Отправлено: 27 Марта, 2012 - 20:35:39
Post Id



Посетитель


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


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




здесь был не правильный код

Жутко был не прав, что-то спать пора наверное....

(Отредактировано автором: 27 Марта, 2012 - 20:47:14)



-----
просто ?: сложно
 
 Top
armancho7777777 Супермодератор
Отправлено: 27 Марта, 2012 - 20:36:06
Post Id



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


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


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




Bio man пишет:
такой код имеет больше смысла

Не то.
Мне надо, чтобы в результате обявления экземпляра класса Controler, я мог обратитья ко всем методам классов Auto, Mersedes, Tayota, как тут:
PHP:
скопировать код в буфер обмена
  1.  
  2. $car = new Controler();
  3.  
  4. echo $car->all();
  5. echo '<br>';
  6. echo $car->auto();
  7. echo '<br>';
  8. echo $car->model_t();
  9. echo '<br>';
  10. echo $car->model_m();
  11.  

(Отредактировано автором: 27 Марта, 2012 - 20:42:10)

 
 Top
Bio man
Отправлено: 27 Марта, 2012 - 20:50:27
Post Id


Постоянный участник


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


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




armancho7777777 пишет:
обявления экземпляра родительского класса, я мог обратитья ко всем методам дочерних классов
Не получиться. Из дочерних классов можно работать с родительским. Ну смотри сам, я подсказал более правильный способ с точки зрения ООП. Почитай про полиморфизм и наследование, может что поймешь.
PHP:
скопировать код в буфер обмена
  1. class Controler {
  2.         private $_object = array();
  3.  
  4.         public function all(){
  5.                 return 'Контролер';
  6.         }
  7.         function __set($key, Auto $val){
  8.                 $this->_object[$key] = $val;
  9.         }
  10.         function __get($key){
  11.                 return $this->_object[$key];
  12.         }
  13. }
  14.  
  15. $controler = new Controler();
  16. $controler->car1 = new Tayota();
  17. $controler->car2 = new Mersedes();
  18. echo $controler->car1->model();
  19. echo $controler->car2->model();

можно так но не наследованием. Как Авто связано с контроллером? Что общего?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB