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 (64 lines) | stat: -rw-r--r-- 2,820 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
61
62
63
64
<sect1 id="zend.view.abstract">
    <title>Zend_View_Abstract</title>

    <para>
        Klasa <code>Zend_View_Abstract</code> jest klasą bazową w oparciu o
        którą zbudowana jest klasa <code>Zend_View</code>; Klasa
        <code>Zend_View</code> po prostu rozszerza ją i deklaruje implementację
        metody <code>_run()</code> (która jest wywoływana przez metodę
        <code>render()</code>).
    </para>

    <para>
        Wielu programistów potrzebuje rozszerzyć obiekt
        <code>Zend_View_Abstract</code> aby dodać własną funkcjonalność i
        nieuniknione jest że napotykają problemy dotyczące projektu klasy, która
        posiada wiele prywatnych zmiennych. Ten dokument ma wyjaśnić jakie
        przesłanki stały za decyzjami podjętymi podczas projektowania komponentu.
    </para>

    <para>
        <code>Zend_View</code> jest czymś w rodzaju systemu szablonów
        używającego natywnej składni PHP. W rezultacie możliwe jest użycie w
        skryptach widoków kodu PHP, a dodatkowo dziedziczą one zakres
        wywołującego je obiektu.
    </para>

    <para>
        Dlatego ten drugi punkt jest tak ważny dla decyzji podejmowanych
        podczas projektowania. Wewnętrznie metoda <code>Zend_View::_run()</code>
        wygląda tak:
    </para>

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

    <para>
        Skrypty widoków mają dostęp do obecnego obiektu (<code>$this</code>),
        <emphasis>i wszystkich metod oraz zmiennych tego obiektu</emphasis>.
        Z tego względu, że wiele operacji zależy od zmiennych prywatnych,
        mogłoby to spowodować problem: skrypty widoków mogłyby
        wywołać te metody lub bezpośrednio zmodyfikować krytyczne zmienne.
        Wobraź sobie skrypt nadpisujący w niezamierzony sposób zmienną
        <code>$_path</code> lub <code>$_file</code> -- wszystkie następne
        wywołania metody <code>render()</code> lub helperów widoków przestałyby
        działać!
    </para>

    <para>
        Na szczęście w PHP 5 może to być rozwiązane dzięki deklaracjom
        widoczności: prywatne zmienne nie są dostępne przez obiekty
        rozszerzające daną klasę. Zostało to użyte w obecnym projekcie: z tego
        względu, że klasa <code>Zend_View</code> <emphasis>rozszerza</emphasis>
        klasę <code>Zend_View_Abstract</code>, skrypty widoku są ograniczone
        tylko do metod i zmiennych chronionych oraz publicznych obiektu
        <code>Zend_View_Abstract</code> -- efektywnie ograniczając akcje jakie
        można przeprowadzić i pozwalając nam na zabezpiecznie krytycznych
        obszarów przed nadużyciami w skryptach widoków.
    </para>
</sect1>