| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 15157 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.view.abstract">
- <title>Zend_View_Abstract</title>
- <para>
- <classname>Zend_View_Abstract</classname> ist die Basisklasse auf der <classname>Zend_View</classname>
- aufbaut; <classname>Zend_View</classname> selbst erweitert Sie einfach und deklariert eine
- konkrete Implementation der <code>_run()</code> Methode (welche durch <code>render()</code>
- aufgerufen wird).
- </para>
- <para>
- Viele Entwickler finden das Sie <classname>Zend_View_Abstract</classname> erweitern wollen um
- eigene Funktionalitäten hinzuzufügen und daraus folgend in Probleme mit dessen Design
- laufen, welches eine Anzahl an privaten Membern enthält. Dieses Dokument zielt darauf ab
- die Entscheidung hinter diesem Design zu erklären.
- </para>
- <para>
- <classname>Zend_View</classname> ist etwas wie eine Anti-Template Maschine und verwendet deswegen
- PHP nativ für sein Templating. Als Ergebnis ist alles von PHP vorhanden und View Skripte
- erweitern Ihre aufrufendes Objekt.
- </para>
- <para>
- Es ist dieser letzte Punkt der relevant für die Design Entscheidung war. Intern macht
- <classname>Zend_View::_run()</classname> folgendes:
- </para>
- <programlisting role="php"><![CDATA[
- protected function _run()
- {
- include func_get_arg(0);
- }
- ]]></programlisting>
- <para>
- Als solches, haben die View Skripte Zugriff auf das aktuelle Objekt (<code>$this</code>),
- <emphasis>und jede Methode oder jeden Member dieses Objekts</emphasis>. Da viele
- Operationen von Membern mit limitierter Sichtbarkeit abhängen, führt das zu einem Problem:
- Das View Skript können potentiell Aufrufe zu solchen Methoden tätigen, oder kritische
- Eigenschaften direkt ändern. Angenommen ein Skript überschreibt <code>$_path</code> oder
- <code>$_file</code> unabsichtlich -- jeder weitere Aufruf zu <code>render()</code> oder
- View Helfern würde fehlschlagen!
- </para>
- <para>
- Glücklicherweise hat PHP5 eine Anwort auf das mit seiner Deklaration der Sichtbarkeit;
- Auf private Member kann nicht durch Objekte zugegriffen werden wenn eine bestehende Klasse
- erweitert wird. Das führt zum aktuellen Design: Da <classname>Zend_View</classname>
- <classname>Zend_View_Abstract</classname> <emphasis>erweitert</emphasis> sind View Skripte limitiert
- auf protected und public Methoden und Member von <classname>Zend_View_Abstract</classname> --
- was effektiv die Aktionen beschränkt die durchgeführt werden können, und es erlaubt
- kritische Bereiche vor Missbrauch durch View Skripte zu schützen.
- </para>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|