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 :: extends от объекта

 PHP.SU

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


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

> Описание: extends от объекта
alexxorlovv
Отправлено: 28 Ноября, 2013 - 04:09:26
Post Id



Новичок


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


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




Парни кто нибудь знает как на stdclass сделать extends? допустим приходит json stdclass он декодируется. А затем нужно чтобы он унаследовал все методы другого класса.Как такое можно сделать?(если вообще это возможно) может есть какой то DesignPattern?
 
 Top
armancho7777777 Супермодератор
Отправлено: 28 Ноября, 2013 - 04:48:27
Post Id



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


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


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




Только путём агрегирования.
 
 Top
tato
Отправлено: 28 Ноября, 2013 - 04:51:14
Post Id



Посетитель


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


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




Есть агрегация и композиция. Это когда объекты одного класса входят в другой.
например:
PHP:
скопировать код в буфер обмена
  1.  
  2. class Test
  3. {
  4.  
  5.     private $_obj;
  6.  
  7.     public function __construct( $obj )
  8.     {
  9.         $this->_obj = $obj;
  10.     }
  11.  
  12.     public function getName()
  13.     {
  14.           return $this->_appendString( $this->_obj->name );
  15.     }
  16.  
  17.     private function _appendString( $string, $prefix = 'pref_' )
  18.     {
  19.         return "$prefix$string";
  20.     }
  21. }
  22.  
  23.  
  24. $std_class = json_decode( $json_data );
  25. $test = new Test( $std_class );
  26.  
  27. echo $test->getName();
  28.  

(Добавление)
еще можно использовать __call() для доступа к методам.


-----
просто ?: сложно
 
 Top
armancho7777777 Супермодератор
Отправлено: 28 Ноября, 2013 - 05:08:54
Post Id



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


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


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




Реализация №1 (Отобразить)

Примеры (Отобразить)

Результат (Отобразить)

Во второй реализации объекты будут создаваться динамически (единожды)
в момент обращения к свойству, если текущее значение является массивом,
чтобы не плодить объекты, которые не будут использованы.
Если класс не переполнен функционалом - это не критично,
в противном случае может заметно увеличиться потребление памяти.

Реализация №2 (Отобразить)

PHP:
скопировать код в буфер обмена
  1. $sJson = json_encode(array('foo' => array('bar' => 'Hello!')));
  2. $rJson = jsonDecode($sJson);
  3.  
  4. echo $rJson->foo->bar;

(Отредактировано автором: 28 Ноября, 2013 - 09:36:22)

 
 Top
AmsTaFF
Отправлено: 28 Ноября, 2013 - 08:53:40
Post Id


Гость


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


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




Перечислю способы, которые применимы (которые я видел как применяли, или сам применял) в случае, если есть некий класс, и для него есть данные в JSON формате

например с http://php.net/manual/ru/book.reflection.php ReflectionClass. Он более сложный и "опасный", но он применим, когда нужно задать приватные данные в объекте.

когда есть класс с сеттерами/геттерами и методами и неохота менять его как-то, то я использую класс/метод который переводит объект std в экземпляр соответствующего класса. В этом классе/методе происходят все проверки и прочая лабуда

* класс или метод выбирается относительно объема операций, которые надо совершить над std-объектом, чтобы привести его к нужному экземпляру класса.
 
 Top
alexxorlovv
Отправлено: 29 Ноября, 2013 - 07:59:41
Post Id



Новичок


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


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




Спасибо всем.
 
 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