1 <sect1 id="zend.view.abstract">
2 <title>Zend_View_Abstract</title>
5 Klasa <code>Zend_View_Abstract</code> jest klasą bazową w oparciu o
6 którą zbudowana jest klasa <code>Zend_View</code>; Klasa
7 <code>Zend_View</code> po prostu rozszerza ją i deklaruje implementację
8 metody <code>_run()</code> (która jest wywoływana przez metodę
9 <code>render()</code>).
13 Wielu programistów potrzebuje rozszerzyć obiekt
14 <code>Zend_View_Abstract</code> aby dodać własną funkcjonalność i
15 nieuniknione jest że napotykają problemy dotyczące projektu klasy, która
16 posiada wiele prywatnych zmiennych. Ten dokument ma wyjaśnić jakie
17 przesłanki stały za decyzjami podjętymi podczas projektowania komponentu.
21 <code>Zend_View</code> jest czymś w rodzaju systemu szablonów
22 używającego natywnej składni PHP. W rezultacie możliwe jest użycie w
23 skryptach widoków kodu PHP, a dodatkowo dziedziczą one zakres
24 wywołującego je obiektu.
28 Dlatego ten drugi punkt jest tak ważny dla decyzji podejmowanych
29 podczas projektowania. Wewnętrznie metoda <code>Zend_View::_run()</code>
33 <programlisting role="php"><![CDATA[
34 protected function _run()
36 include func_get_arg(0);
42 Skrypty widoków mają dostęp do obecnego obiektu (<code>$this</code>),
43 <emphasis>i wszystkich metod oraz zmiennych tego obiektu</emphasis>.
44 Z tego względu, że wiele operacji zależy od zmiennych prywatnych,
45 mogłoby to spowodować problem: skrypty widoków mogłyby
46 wywołać te metody lub bezpośrednio zmodyfikować krytyczne zmienne.
47 Wobraź sobie skrypt nadpisujący w niezamierzony sposób zmienną
48 <code>$_path</code> lub <code>$_file</code> -- wszystkie następne
49 wywołania metody <code>render()</code> lub helperów widoków przestałyby
54 Na szczęście w PHP 5 może to być rozwiązane dzięki deklaracjom
55 widoczności: prywatne zmienne nie są dostępne przez obiekty
56 rozszerzające daną klasę. Zostało to użyte w obecnym projekcie: z tego
57 względu, że klasa <code>Zend_View</code> <emphasis>rozszerza</emphasis>
58 klasę <code>Zend_View_Abstract</code>, skrypty widoku są ograniczone
59 tylko do metod i zmiennych chronionych oraz publicznych obiektu
60 <code>Zend_View_Abstract</code> -- efektywnie ograniczając akcje jakie
61 można przeprowadzić i pozwalając nam na zabezpiecznie krytycznych
62 obszarów przed nadużyciami w skryptach widoków.