Zend_View-Abstract.xml 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  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
  8. <classname>Zend_View</classname> aufbaut; <classname>Zend_View</classname> selbst erweitert
  9. Sie einfach und deklariert eine konkrete Implementation der <methodname>_run()</methodname>
  10. Methode (welche durch <methodname>render()</methodname> aufgerufen wird).
  11. </para>
  12. <para>
  13. Viele Entwickler finden das Sie <classname>Zend_View_Abstract</classname> erweitern wollen
  14. um 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
  20. deswegen <acronym>PHP</acronym> nativ für sein Templating. Als Ergebnis ist alles von
  21. <acronym>PHP</acronym> vorhanden und View Skripte 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. <methodname>Zend_View::_run()</methodname> folgendes:
  26. </para>
  27. <programlisting language="php"><![CDATA[
  28. protected function _run()
  29. {
  30. include func_get_arg(0);
  31. }
  32. ]]></programlisting>
  33. <para>
  34. Als solches, haben die View Skripte Zugriff auf das aktuelle Objekt
  35. (<varname>$this</varname>), <emphasis>und jede Methode oder jeden Member dieses
  36. Objekts</emphasis>. Da viele Operationen von Membern mit limitierter Sichtbarkeit abhängen,
  37. führt das zu einem Problem: Das View Skript können potentiell Aufrufe zu solchen Methoden
  38. tätigen, oder kritische Eigenschaften direkt ändern. Angenommen ein Skript überschreibt
  39. <varname>$_path</varname> oder <varname>$_file</varname> unabsichtlich -- jeder weitere
  40. Aufruf zu <methodname>render()</methodname> oder View Helfern würde fehlschlagen!
  41. </para>
  42. <para>
  43. Glücklicherweise hat <acronym>PHP</acronym> 5 eine Anwort auf das mit seiner Deklaration der
  44. Sichtbarkeit; Auf private Member kann nicht durch Objekte zugegriffen werden wenn eine
  45. bestehende Klasse erweitert wird. Das führt zum aktuellen Design: Da
  46. <classname>Zend_View</classname> <classname>Zend_View_Abstract</classname>
  47. <emphasis>erweitert</emphasis> sind View Skripte limitiert auf protected und public Methoden
  48. und Member von <classname>Zend_View_Abstract</classname> -- was effektiv die Aktionen
  49. beschränkt die durchgeführt werden können, und es erlaubt kritische Bereiche vor Missbrauch
  50. durch View Skripte zu schützen.
  51. </para>
  52. </sect1>
  53. <!--
  54. vim:se ts=4 sw=4 et:
  55. -->