1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
<sect1 id="zend.feed.custom-feed">
<title>Classi personalizzate per feed ed elementi</title>
<para>
Infine, è possibile estendere la classe <code>Zend_Feed</code> se si desidera offrire un proprio formato o raffinatezze come la gestione automatica di elementi all'interno di namespace personalizzati.
</para>
<para>
Ecco un esempio di un elemento personalizzato di un feed Atom che gestisce un proprio namespace <code>mions:</code>.
Si noti come la classe si occupa di eseguire anche la richiesta a <code>registerNamespace()</code> in modo che l'utente finale non debba preoccuparsi affatto dell'uso dei namespace.
</para>
<example id="zend.feed.custom-feed.example.extending">
<title>Estensione della classe elemento Atom con namespace personalizzati</title>
<programlisting role="php"><![CDATA[<?php
/**
* La classe elemento personalizzata conosce l'URI del feed (opzionale) e
* può aggiungere ulteriori namespace in automatico
*/
class MyEntry extends Zend_Feed_Entry_Atom
{
public function __construct($uri = 'http://www.example.com/myfeed/',
$xml = null)
{
parent::__construct($uri, $xml);
Zend_Feed::registerNamespace('mions', 'http://www.example.com/mions/1.0');
}
public function __get($var)
{
switch ($var) {
case 'myUpdated':
// Converti myUpdated in mions:updated.
return parent::__get('mions:updated');
default:
return parent::__get($var);
}
}
public function __set($var, $value)
{
switch ($var) {
case 'myUpdated':
// Converti myUpdated in mions:updated.
parent::__set('mions:updated', $value);
break;
default:
parent::__set($var, $value);
}
}
public function __call($var, $unused)
{
switch ($var) {
case 'myUpdated':
// Converti myUpdated to myns:updated.
return parent::__call('myns:updated', $unused);
default:
return parent::__call($var, $unused);
}
}
}]]>
</programlisting>
<para>
A questo punto per utilizzare la classe è sufficiente crearne direttamente un'istanza ed impostare la proprietà <code>myUpdated</code>:
</para>
<programlisting role="php"><![CDATA[<?php
$entry = new MyEntry();
$entry->myUpdated = '2005-04-19T15:30';
// la chiamata in stile metodo è gestita dalla funzione __call
$entry->myUpdated();
// la chiamata in stile proprietà è gestita dalla funzione __get
$entry->myUpdated;]]>
</programlisting>
</example>
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
|