2
0

Zend_View-Abstract.xml 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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> est la classe de base à partir de laquelle
  8. <classname>Zend_View</classname> est construite ; <classname>Zend_View</classname> elle-même
  9. l'étend simplement et déclare une implémentation concrète de la méthode <code>_run()</code>
  10. (qui est invoquée par <code>render()</code>).
  11. </para>
  12. <para>
  13. De nombreux développeurs constatent qu'ils veulent étendre
  14. <classname>Zend_View_Abstract</classname> afin d'ajouter des fonctionnalités
  15. supplémentaires, et inévitablement se trouvent confrontés face à des problèmes avec ce
  16. design, qui inclut un certain nombre de membres privés. Ce document a pour but d'expliquer
  17. les décisions qui ont poussé à ce design.
  18. </para>
  19. <para>
  20. <classname>Zend_View</classname> est une sorte de moteur anti-template dans lequel on
  21. utilise nativement PHP pour la réalisation du template. Avec comme résultat, tout le PHP est
  22. disponible, et les scripts de vue héritent de la portée des objets appelants.
  23. </para>
  24. <para>
  25. C'est ce dernier point qui est important dans le choix de la décision de ce design. En
  26. interne, <classname>Zend_View::_run()</classname> réalise simplement ceci :
  27. </para>
  28. <programlisting language="php"><![CDATA[
  29. protected function _run()
  30. {
  31. include func_get_arg(0);
  32. }
  33. ]]></programlisting>
  34. <para>
  35. Ainsi, les scripts de vue ont accès à l'objet courant(<code>$this</code>),
  36. <emphasis>et toute méthode ou membres et cet objet</emphasis>. Puisque beaucoup d'opérations
  37. dépendent de membres ayant une portée limitée, ceci pose un problème : les scrips de vue
  38. peuvent potentiellement faire des appels à ces méthodes ou modifier des propriétés critiques
  39. directement. Imaginer un script surchargeant par inadvertance <code>$_path</code> ou
  40. <code>$_file</code> - tout appel suivant à <code>render()</code> ou aux aides de vue sera
  41. cassé !
  42. </para>
  43. <para>
  44. Heureusement, PHP 5 a une réponse à ceci avec ses déclarations de visibilité : les
  45. membres privés se sont pas accessibles par un objet étendant une classe donnée. Ceci a
  46. permis la conception actuelle : <classname>Zend_View</classname> <emphasis>étend</emphasis>
  47. <classname>Zend_View_Abstract</classname>, les scripts de vues sont ainsi limités aux seuls
  48. méthodes et membres <code>public</code> ou <code>protected</code> de
  49. <classname>Zend_View_Abstract</classname> - limitant effectivement les actions qu'il peut
  50. exécuter, et nous permettant de sécuriser des secteurs critiques d'un risque de modification
  51. par les scripts de vue.
  52. </para>
  53. </sect1>