Главная / Zend Manual Core
Изменение структуры лент и их сообщений

Создание собственных классов лент и записей

Вы можете наследовать классы Zend_Feed, если хотите обеспечить собственный формат или такие улучшения, как автоматическая обработка элементов, которые должны находиться в специальном пространстве имен.

Здесь приведен пример специального класса сообщения Atom, который управляет сообщениями в собственным пространстве имен myns:. Обратите внимание, что он автоматически производит вызов registerNamespace(), так что конечным пользователям не нужно будет беспокоиться о пространствах имен.

Example #1 Расширение класса сообщения Atom с добавлением специальных пространств имен

  1. /**
  2. * Специальный класс сообщения знает URI ленты и может автоматически
  3. * добавлять дополнительные пространства имен
  4. */
  5. class MyEntry extends Zend_Feed_Entry_Atom
  6. {
  7.  
  8.     public function __construct($uri = 'http://www.example.com/myfeed/',
  9.                                 $xml = null)
  10.     {
  11.         parent::__construct($uri, $xml);
  12.  
  13.         Zend_Feed::registerNamespace('myns', 'http://www.example.com/myns/1.0');
  14.     }
  15.  
  16.     public function __get($var)
  17.     {
  18.         switch ($var) {
  19.             case 'myUpdated':
  20.                 // преобразование myUpdated в myns:updated.
  21.                 return parent::__get('myns:updated');
  22.  
  23.             default:
  24.                 return parent::__get($var);
  25.             }
  26.     }
  27.  
  28.     public function __set($var, $value)
  29.     {
  30.         switch ($var) {
  31.             case 'myUpdated':
  32.                 // преобразование myUpdated в myns:updated.
  33.                 parent::__set('myns:updated', $value);
  34.                 break;
  35.  
  36.             default:
  37.                 parent::__set($var, $value);
  38.         }
  39.     }
  40.  
  41.     public function __call($var, $unused)
  42.     {
  43.         switch ($var) {
  44.             case 'myUpdated':
  45.                 // преобразование myUpdated в myns:updated.
  46.                 return parent::__call('myns:updated', $unused);
  47.  
  48.             default:
  49.                 return parent::__call($var, $unused);
  50.         }
  51.     }
  52. }

Далее для использования этого класса просто создаете его экземпляр и устанавливаете свойство myUpdated:

  1. $entry = new MyEntry();
  2. $entry->myUpdated = '2005-04-19T15:30';
  3.  
  4. // вызов в виде метода обрабатывается функцией __call
  5. $entry->myUpdated();
  6. // вызов в виде свойства обрабатывается функцией __get
  7. $entry->myUpdated;

Изменение структуры лент и их сообщений