Zend_View-Abstract.xml 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15617 -->
  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 <code>_run()</code> Methode
  10. (welche durch <code>render()</code> 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 PHP nativ für sein Templating. Als Ergebnis ist alles von PHP vorhanden und View
  21. 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. <classname>Zend_View::_run()</classname> 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 (<code>$this</code>),
  35. <emphasis>und jede Methode oder jeden Member dieses Objekts</emphasis>. Da viele
  36. Operationen von Membern mit limitierter Sichtbarkeit abhängen, führt das zu einem Problem:
  37. Das View Skript können potentiell Aufrufe zu solchen Methoden tätigen, oder kritische
  38. Eigenschaften direkt ändern. Angenommen ein Skript überschreibt <code>$_path</code> oder
  39. <code>$_file</code> unabsichtlich -- jeder weitere Aufruf zu <code>render()</code> oder
  40. View Helfern würde fehlschlagen!
  41. </para>
  42. <para>
  43. Glücklicherweise hat PHP5 eine Anwort auf das mit seiner Deklaration der Sichtbarkeit;
  44. Auf private Member kann nicht durch Objekte zugegriffen werden wenn eine bestehende Klasse
  45. erweitert wird. Das führt zum aktuellen Design: Da <classname>Zend_View</classname>
  46. <classname>Zend_View_Abstract</classname> <emphasis>erweitert</emphasis> sind View Skripte
  47. limitiert auf protected und public Methoden und Member von
  48. <classname>Zend_View_Abstract</classname> -- was effektiv die Aktionen beschränkt die
  49. durchgeführt werden können, und es erlaubt kritische Bereiche vor Missbrauch durch View
  50. Skripte zu schützen.
  51. </para>
  52. </sect1>
  53. <!--
  54. vim:se ts=4 sw=4 et:
  55. -->