Klasa Zend_View_Abstract
jest klasą bazową w oparciu o
którą zbudowana jest klasa Zend_View
; Klasa
Zend_View
po prostu rozszerza ją i deklaruje implementację
metody _run()
(która jest wywoływana przez metodę
render()
).
Wielu programistów potrzebuje rozszerzyć obiekt
Zend_View_Abstract
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.
Zend_View
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.
Dlatego ten drugi punkt jest tak ważny dla decyzji podejmowanych
podczas projektowania. Wewnętrznie metoda Zend_View::_run()
wygląda tak:
protected function _run() { include func_get_arg(0); }
Skrypty widoków mają dostęp do obecnego obiektu ($this
),
i wszystkich metod oraz zmiennych tego obiektu.
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ą
$_path
lub $_file
-- wszystkie następne
wywołania metody render()
lub helperów widoków przestałyby
działać!
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 Zend_View
rozszerza
klasę Zend_View_Abstract
, skrypty widoku są ograniczone
tylko do metod i zmiennych chronionych oraz publicznych obiektu
Zend_View_Abstract
-- efektywnie ograniczając akcje jakie
można przeprowadzić i pozwalając nam na zabezpiecznie krytycznych
obszarów przed nadużyciami w skryptach widoków.