Zend_View-Abstract.xml 2.8 KB

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