File: Zend_View-Abstract.xml

package info (click to toggle)
zendframework 1.12.9%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 133,584 kB
  • sloc: xml: 1,311,829; php: 570,173; sh: 170; makefile: 125; sql: 121
file content (60 lines) | stat: -rw-r--r-- 3,089 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.view.abstract">
    <title>Zend_View_Abstract</title>

    <para>
        <classname>Zend_View_Abstract</classname> est la classe de base à partir de laquelle
        <classname>Zend_View</classname> est construite ; <classname>Zend_View</classname> elle-même
        l'étend simplement et déclare une implémentation concrète de la méthode <methodname>_run()</methodname>
        (qui est invoquée par <methodname>render()</methodname>).
    </para>

    <para>
        De nombreux développeurs constatent qu'ils veulent étendre
        <classname>Zend_View_Abstract</classname> afin d'ajouter des fonctionnalités
        supplémentaires, et inévitablement se trouvent confrontés face à des problèmes avec ce
        design, qui inclut un certain nombre de membres privés. Ce document a pour but d'expliquer
        les décisions qui ont poussé à ce design.
    </para>

    <para>
        <classname>Zend_View</classname> est une sorte de moteur anti-template dans lequel on
        utilise nativement <acronym>PHP</acronym> pour la réalisation du template. Avec comme résultat, tout le <acronym>PHP</acronym> est
        disponible, et les scripts de vue héritent de la portée des objets appelants.
    </para>

    <para>
        C'est ce dernier point qui est important dans le choix de la décision de ce design. En
        interne, <methodname>Zend_View::_run()</methodname> réalise simplement ceci :
    </para>

    <programlisting language="php"><![CDATA[
protected function _run()
{
    include func_get_arg(0);
}
]]></programlisting>

    <para>
        Ainsi, les scripts de vue ont accès à l'objet courant(<varname>$this</varname>),
        <emphasis>et toute méthode ou membres et cet objet</emphasis>. Puisque beaucoup d'opérations
        dépendent de membres ayant une portée limitée, ceci pose un problème : les scrips de vue
        peuvent potentiellement faire des appels à ces méthodes ou modifier des propriétés critiques
        directement. Imaginer un script surchargeant par inadvertance <varname>$_path</varname> ou
        <varname>$_file</varname> - tout appel suivant à <methodname>render()</methodname> ou aux aides de vue sera
        cassé !
    </para>

    <para>
        Heureusement, <acronym>PHP</acronym> 5 a une réponse à ceci avec ses déclarations de visibilité : les
        membres privés se sont pas accessibles par un objet étendant une classe donnée. Ceci a
        permis la conception actuelle : <classname>Zend_View</classname> <emphasis>étend</emphasis>
        <classname>Zend_View_Abstract</classname>, les scripts de vues sont ainsi limités aux seuls
        méthodes et membres <code>public</code> ou <code>protected</code> de
        <classname>Zend_View_Abstract</classname> - limitant effectivement les actions qu'il peut
        exécuter, et nous permettant de sécuriser des secteurs critiques d'un risque de modification
        par les scripts de vue.
    </para>
</sect1>