Zend_View-Abstract.xml 2.6 KB

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