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
Форумы портала PHP.SU :: Версия для печати :: Как не запутаться...
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Как не запутаться...

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

1. armancho7777777 - 27 Марта, 2012 - 19:59:16 - перейти к сообщению
Всем привет!
Решил основательно взяться за ООП.

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

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', который виден во всех файлах сайта.
Далее, решил, на пример, добавить новый класс, расширив основной":

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

Потом ешё:
PHP:
скопировать код в буфер обмена
  1. class Mersedes extends Tayota {


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

т.е. как не ошибиться, какой класс надо будет в дальнейшем расширить,
что бы всё перешло к основному родительскому классу, в данном случае 'Controler'.
2. Мелкий - 27 Марта, 2012 - 20:12:11 - перейти к сообщению
armancho7777777 пишет:
что бы всё перешло к основному родительскому классу, в данном случае 'Controler'.

Всё совсем наоборот в коде.
3. armancho7777777 - 27 Марта, 2012 - 20:13:36 - перейти к сообщению
Мелкий, покажите пожалуйста как правильно Растерялся
4. Bio man - 27 Марта, 2012 - 20:13:38 - перейти к сообщению
Controller это не родительский а дочерний класс! Смысл наследования сделать код меньше, переопределяя некоторый код родителя, в твоем же примере класс только расширяет но не переопределяет, тогда встает вопрос - зачем наследовать? Если нужно работать с каким то классом в каком то классе, когда по функциональности классы не связаны то не логичнее использовать композицию или агрегацию?
5. armancho7777777 - 27 Марта, 2012 - 20:17:26 - перейти к сообщению
Покажите на моём примере как правильно пожалуйста.
Мне надо, что бы все классы, которые я добавляю, были дочерними контролёра.
То есть после чего объявляю экземпляр родительского класса:

и получаю доступ ко всем публичным методам и свойствам всех классов.
6. Bio man - 27 Марта, 2012 - 20:17:57 - перейти к сообщению
armancho7777777 пишет:
Вопрос: как во всём этом не запутаться?
Код нужно документировать, что является хорошим тоном программирования.
7. armancho7777777 - 27 Марта, 2012 - 20:18:19 - перейти к сообщению
Bio man пишет:
Смысл наследования сделать код меньше, переопределяя некоторый код родителя

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

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

Ну это само собой.
8. Bio man - 27 Марта, 2012 - 20:19:39 - перейти к сообщению
armancho7777777 пишет:
и получаю доступ ко всем публичным методам и свойствам всех классов.
еще раз, в вашем случае не нужно наследовать, т.к. работать с публичными данными можно без наследования.
9. armancho7777777 - 27 Марта, 2012 - 20:21:07 - перейти к сообщению
Bio man пишет:
т.к. работать с публичными данными можно без наследования.

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


В общем, как сделать все классы дочерними одного, в данном случае "Controler"а?
10. Bio man - 27 Марта, 2012 - 20:29:37 - перейти к сообщению
armancho7777777 пишет:
Ну это само собой.
Если само собой, то зачем тему создавать?
такой код имеет больше смысла
Спойлер (Отобразить)
11. armancho7777777 - 27 Марта, 2012 - 20:31:21 - перейти к сообщению
Bio man пишет:
Если само собой, то зачем тему создавать?

Я про комментарии.
12. Bio man - 27 Марта, 2012 - 20:33:39 - перейти к сообщению
armancho7777777 пишет:
Я про комментарии.
Ну "комментарии" это ответ на изначальный вопрос, вопрос про наследование встал уже позже.
13. tato - 27 Марта, 2012 - 20:35:39 - перейти к сообщению
здесь был не правильный код

Жутко был не прав, что-то спать пора наверное....
14. armancho7777777 - 27 Марта, 2012 - 20:36:06 - перейти к сообщению
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.  
15. Bio man - 27 Марта, 2012 - 20:50:27 - перейти к сообщению
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();

можно так но не наследованием. Как Авто связано с контроллером? Что общего?

 

Powered by ExBB FM 1.0 RC1