Zend_View-Abstract.xml 2.8 KB

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