Zend_View-Abstract.xml 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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> 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 <methodname>_run()</methodname>
  10. (qui est invoquée par <methodname>render()</methodname>).
  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 <acronym>PHP</acronym> pour la réalisation du template. Avec comme résultat, tout le <acronym>PHP</acronym> 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, <methodname>Zend_View::_run()</methodname> 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(<varname>$this</varname>),
  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 <varname>$_path</varname> ou
  40. <varname>$_file</varname> - tout appel suivant à <methodname>render()</methodname> ou aux aides de vue sera
  41. cassé !
  42. </para>
  43. <para>
  44. Heureusement, <acronym>PHP</acronym> 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>