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 :: OOP

 PHP.SU

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


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

> Без описания
ytrewq123
Отправлено: 16 Мая, 2016 - 23:58:43
Post Id


Посетитель


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


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




Здравствуйте!
Пытаюсь понять ООП. Вот такой вопросик.
Есть такой код.

PHP:
скопировать код в буфер обмена
  1. class Klass1
  2. {
  3.     public function metod1()
  4.     {
  5.     Klass2::metod2();
  6.     }
  7. }
  8.  
  9.  
  10. class Klass2
  11. {
  12.     public function metod2()
  13.     {
  14.     echo 'TUTAAAAA <br>';
  15.     $this->metod3();
  16.     }
  17.    
  18.       public function metod3()
  19.     {
  20.     echo 'ZDESJA';
  21.     }
  22.    
  23. }
  24.  
  25. $ob = new Klass1();
  26. $ob->metod1();


Почему он не показывает ZDESJA что находится в metod3(). Ведь я же показал от куда брать этот метод. И думал что то что в нём то и случится.
Почему если я пишу $this->metod3(); он выдаёт ошибку.

Fatal error: Call to undefined method Klass1::metod3() in E:\xamppp\htdocs\opyty\praktika\oopopopp13.php on line 354

Конечно когда я пишу так Klass2::metod3(); то выводит. Но странно как-то.
PHP:
скопировать код в буфер обмена
  1. class Klass1
  2. {
  3.     public function metod1()
  4.     {
  5.     Klass2::metod2();
  6.     }
  7. }
  8.  
  9.  
  10. class Klass2
  11. {
  12.     public function metod2()
  13.     {
  14.     echo 'TUTAAAAA <br>';
  15.     Klass2::metod3();
  16.     }
  17.    
  18.       public function metod3()
  19.     {
  20.     echo 'ZDESJA';
  21.     }
  22.    
  23. }
  24.  
  25. $ob = new Klass1();
  26. $ob->metod1();


Не мог бы кто пояснить почему так. Просто если я хочу связывать в классе разные методы и потом с ними работать в другом классе то будет такая проблема???
Как правильно, всё это делать и как это происходит. Если не трудно поясните пожалуйста.
 
 Top
Строитель Модератор
Отправлено: 17 Мая, 2016 - 00:51:31
Post Id



Участник


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


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




ytrewq123 пишет:
хочу связывать в классе разные методы и потом с ними работать в другом классе
Классы надо связывать наследованием, и тогда в дочернем классе будут доступны родительские методы. Ваш пример я немного изменил, протестируйте его на локалке, и посмотрите возвращаемый результат
PHP:
скопировать код в буфер обмена
  1. class Klass1
  2. {
  3.     public function metod1() {
  4.             echo __METHOD__ .'<br />';
  5.     }
  6. }
  7.  
  8. class Klass2 extends Klass1
  9. {
  10.     public function metod2() {
  11.             echo __METHOD__ .'<br />';
  12.             $this->metod3();
  13.     }
  14.    
  15.     public function metod3() {
  16.         echo __METHOD__ .'<br />';
  17.     }
  18.    
  19. }
  20.  
  21. $ob = new Klass2;
  22. $ob->metod1();
  23. $ob->metod2();
  24. /*
  25. Klass1::metod1
  26. Klass2::metod2
  27. Klass2::metod3
  28. */
 
 Top
ytrewq123
Отправлено: 17 Мая, 2016 - 08:51:40
Post Id


Посетитель


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


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




Ага спасибо. Это как бы 2 становится главным, где есть вся информация. И своя и родителя.
Но всё же если мне надо ещё другие методы из других классов вместе. Как мне писать? Может там что-то большое и не хочется наследовать. А надо всего один метод из другого. А возможно решение мои любимчики. Трайты. Не?
 
 Top
arimanecro
Отправлено: 17 Мая, 2016 - 10:52:35
Post Id



Частый гость


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


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




Цитата:
Трайты. Не?


или статические методы
 
 Top
ytrewq123
Отправлено: 17 Мая, 2016 - 11:49:11
Post Id


Посетитель


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


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




arimanecro пишет:
или статические методы

Ну да это тоже можно. А как то, скажем так умнее, профессиональнее ни как?
Или эти два и есть норма?
 
 Top
Bio man
Отправлено: 17 Мая, 2016 - 14:32:20
Post Id


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


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


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




1. включаем все ошибки и смотрим, что не так.
2. статический вызов нестатических методов приведет к ошибке.
3. наследование нужно тогда и только тогда, когда оно нужно ))) тут оно не нужно.

PHP:
скопировать код в буфер обмена
  1. class Klass1
  2. {
  3.     public function metod1()
  4.     {
  5.         $ob2 = new Klass2;
  6.         $ob2->metod2();
  7.     }
  8. }
  9.  
  10.  
  11. class Klass2
  12. {
  13.     public function metod2()
  14.     {
  15.         echo 'TUTAAAAA <br>';
  16.         $this->metod3();
  17.     }
  18.    
  19.     public function metod3()
  20.     {
  21.         echo 'ZDESJA';
  22.     }
  23.    
  24. }
  25.  
  26. $ob = new Klass1();
  27. $ob->metod1();

так будет работать.
 
 Top
ytrewq123
Отправлено: 17 Мая, 2016 - 14:58:32
Post Id


Посетитель


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


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




включаем все ошибки и смотрим, что не так.
Вроде всё включено и всё показывает в чём проблема.

Спасибо. Значит как бы создаём объект этого класса в любом классе и работаем через объект с методами, свойствами. И сколько я понимаю, эти объекты можно делать в любом классе и с разными названиями и работать с ними.

(Отредактировано автором: 17 Мая, 2016 - 15:00:23)

 
 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