Zend_Feed-CustomFeed.xml 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <sect1 id="zend.feed.custom-feed">
  2. <title>Создание собственных классов лент и записей</title>
  3. <para>
  4. Вы можете наследовать классы <code>Zend_Feed</code>, если хотите обеспечить
  5. собственный формат или такие улучшения, как автоматическая обработка
  6. элементов, которые должны находиться в специальном пространстве имен.
  7. </para>
  8. <para>
  9. Здесь приведен пример специального класса сообщения Atom, который управляет
  10. сообщениями в собственным пространстве имен <code>myns:</code>. Обратите
  11. внимание, что он автоматически производит вызов
  12. <code>registerNamespace()</code>, так что конечным пользователям не
  13. нужно будет беспокоиться о пространствах имен.
  14. </para>
  15. <example id="zend.feed.custom-feed.example.extending">
  16. <title>Расширение класса сообщения Atom с добавлением специальных пространств имен</title>
  17. <programlisting language="php"><![CDATA[
  18. /**
  19. * Специальный класс сообщения знает URI ленты и может автоматически
  20. * добавлять дополнительные пространства имен
  21. */
  22. class MyEntry extends Zend_Feed_Entry_Atom
  23. {
  24. public function __construct($uri = 'http://www.example.com/myfeed/',
  25. $xml = null)
  26. {
  27. parent::__construct($uri, $xml);
  28. Zend_Feed::registerNamespace('myns', 'http://www.example.com/myns/1.0');
  29. }
  30. public function __get($var)
  31. {
  32. switch ($var) {
  33. case 'myUpdated':
  34. // преобразование myUpdated в myns:updated.
  35. return parent::__get('myns:updated');
  36. default:
  37. return parent::__get($var);
  38. }
  39. }
  40. public function __set($var, $value)
  41. {
  42. switch ($var) {
  43. case 'myUpdated':
  44. // преобразование myUpdated в myns:updated.
  45. parent::__set('myns:updated', $value);
  46. break;
  47. default:
  48. parent::__set($var, $value);
  49. }
  50. }
  51. public function __call($var, $unused)
  52. {
  53. switch ($var) {
  54. case 'myUpdated':
  55. // преобразование myUpdated в myns:updated.
  56. return parent::__call('myns:updated', $unused);
  57. default:
  58. return parent::__call($var, $unused);
  59. }
  60. }
  61. }
  62. ]]>
  63. </programlisting>
  64. <para>
  65. Далее для использования этого класса просто создаете его экземпляр
  66. и устанавливаете свойство <code>myUpdated</code>:
  67. </para>
  68. <programlisting language="php"><![CDATA[
  69. $entry = new MyEntry();
  70. $entry->myUpdated = '2005-04-19T15:30';
  71. // вызов в виде метода обрабатывается функцией __call
  72. $entry->myUpdated();
  73. // вызов в виде свойства обрабатывается функцией __get
  74. $entry->myUpdated;
  75. ]]>
  76. </programlisting>
  77. </example>
  78. </sect1>
  79. <!--
  80. vim:se ts=4 sw=4 et:
  81. -->