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 » PHP » Напишите за меня, пожалуйста » Помогите с ООП!!!

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

1. 24mir - 05 Октября, 2009 - 20:05:40 - перейти к сообщению
Всем привет! Кто может объяснить и показать понятные примеры использования записей в ООП:
1.

2.

3.

Вот эти 3 записи мне не понятны.
2. Stierus - 06 Октября, 2009 - 10:25:54 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. <?
  2. class test1{
  3.  
  4.         public $var = NULL;
  5.        
  6.         public function __construct(){
  7.                 $this->var = new test2;
  8.         }
  9.        
  10.         public function get_exemplar(){
  11.                 return new test2;
  12.         }
  13.        
  14.         public function test(){
  15.                 echo $this->var->var2;
  16.                 echo '<br/>';
  17.                 echo $this->var->some_function();
  18.         }
  19. }
  20.  
  21. class test2{
  22.  
  23.         public $var2 = 'some text from val';
  24.        
  25.         public function some_function(){
  26.                 return 'some text from function';
  27.         }
  28. }
  29.  
  30. $x= new test1;
  31. echo $x->var->var2;
  32. echo '<br/>';
  33. echo $x->var->some_function();
  34. echo '<br/>';
  35. $x->test();
  36. ?>
3. 24mir - 06 Октября, 2009 - 10:29:40 - перейти к сообщению
Спасибо! а про разыменование что можешь сказать?

приведи пример...
4. Ch_chov - 06 Октября, 2009 - 10:35:59 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. echo $x->get_exemplar()->some_function();
5. 24mir - 06 Октября, 2009 - 10:38:40 - перейти к сообщению
Спасибо!
6. Stierus - 06 Октября, 2009 - 10:53:50 - перейти к сообщению
Да, забыл написать Улыбка
7. 24mir - 06 Октября, 2009 - 11:00:37 - перейти к сообщению
Всем спасибо! Тут еще один вопрос: Расскажите мне про перезагрузку методов и свойств __get, __set,__call, c простыми примерами
8. Stierus - 06 Октября, 2009 - 11:02:17 - перейти к сообщению
Про это и статей много написано и книг (с примерами) - Не ленись, изучай
9. 24mir - 06 Октября, 2009 - 11:04:55 - перейти к сообщению
я бы с радостью, но не могу Огорчение если можно, то расскажи, это и другим на форуме будет полезно! Улыбка
10. movEAX - 07 Октября, 2009 - 06:32:12 - перейти к сообщению
__get, __set, __call - используются при перегрузке. Как они используются?

__get($имя) - при обращении к полю(еще его называют свойством), которого не существует в данном классе, обработка запроса передается этому методу с одним параметром - именем запрашиваемого поля.

Пр.:
PHP:
скопировать код в буфер обмена
  1.  
  2. __get($name){
  3.    
  4.    echo 'Нет здесь такого поля!('.$name.')';
  5.  
  6. }


__set($имя, $значение) - аналогично __get() за исключением того, что вызывается тогда, и только тогда, когда несуществующему полю пытаются задать значение.

Пр.:
PHP:
скопировать код в буфер обмена
  1.  
  2. $people->age = 400;
  3.  
  4. ...
  5.  
  6. __set($name, $value){
  7.  
  8.     ErrorLog::Report(__CLASS__, $name, $value);
  9.  
  10. }


__call -почти аналогичен __set(), с той разницей что он используется для методов (то биш функций).
11. 24mir - 07 Октября, 2009 - 07:42:27 - перейти к сообщению
Про __set, __call понял, а про __get не могу понять Огорчение
__set вызывается в том случае, когда идет обращение к несуществующему свойству, а __call аналогично, только идет обращение к методу, так?
12. koras - 07 Октября, 2009 - 08:21:25 - перейти к сообщению
ссылки можно, почитать хочу
13. movEAX - 07 Октября, 2009 - 15:13:56 - перейти к сообщению
24mir пишет:
Про __set, __call понял, а про __get не могу понять
__set вызывается в том случае, когда идет обращение к несуществующему свойству, а __call аналогично, только идет обращение к методу, так?


Не совсем, метод __get() вызывается тогда, когда пытаются ПОЛУЧИТЬ значение несуществуещего свойства,а метод __set() вызывается тогда, когда несуществуещему свойству пытаются ПРИСВОИТЬ значение. Метод __call() вызывается при попытке вызвать несуществующий метод. Вот ссылка, там более подробно все описано: ->

 

Powered by ExBB FM 1.0 RC1