1 <sect1 id="zend.view.abstract">
2 <title>Zend_View_Abstract</title>
5 <code>Zend_View_Abstract</code> הינו מחלקת הבסיס עליה <code>Zend_View</code> מבוססת; <code>Zend_View</code> בעצמה בסך הכל מרחיבה אותה ומגדירה את המתודה
6 <code>_run()</code> (אשר מיוחסת לאחר מכן אל <code>render()</code>).
10 מתכנתים רבים רוצים להרחיב את <code>Zend_View_Abstract</code> ולהוסיף פונקציונליות מותאמת אישית,
11 ובאופן בלתי נמנע נתקלים בבעיות עם העיצוב שלה, המסמך הזה נועד להצגת ההחלטות מאחורי עיצוב הרכיב הזה.
15 <code>Zend_View</code> היא סוג של אנטי-מנוע-טמפלייטס בכך שהיא משתמשת ב PHP בתור מנוע טמפלייט.
16 כתוצאה מכך כל הפונקציות של PHP קיימות, וסקריפטים של תצוגה מקבלים את כל האובייקטים הקיימים.
20 <code>Zend_View::_run()</code> מבצע את הדבר הבא:
23 <programlisting role="php"><![CDATA[
24 protected function _run()
26 include func_get_arg(0);
32 לכן, סקריפטים של התצוגה יכולים לגשת לאובייקט הנוכחי (<code>$this</code>), וכל המתודות או המשתמשים של אותו אובייקט.
33 מאחר וכמה פעולות מבוססת על משתמשים עם גישה וראות מסויימת, זה גורם לבעיה: סקריפט התצוגה יכול לקרוא למתודות מסויימות שהוא לא אמור או לדרוס הגדרות ישירות.
34 לדוגמא תארו לעצמכם שסקריפט התצוגה ידרוס את <code>$_path</code> או <code>$_file</code> -- כל קריאות נוספות ל <code>render()</code> לא יפעלו.
38 למרבה המזל, PHP 5 מכילה פתרון לבעיה זו עם הגדרות הראות שלה: משתמשים פרטיים לא ניתנים לגישה או דריסה על ידי אובייקט אשר מרחיב מחלקה מסויימת. זה הוביל לעיצוב המחלקה הנוכחית:
39 מאחר ו <code>Zend_View</code> מרחיב את <code>Zend_View_Abstract</code>, סקריפטי תצוגה מוגבלים רק למתודות וערכים ציבוריים ומוגנים של <code>Zend_View_Abstract</code> --
40 ולמעשה מגבילים את האפשרויות והפעולות שניתן לבצע, ומאפשר לנו לאבטח איזורים קריטיים במערכת מפני שימוש לא נכון או לא תקני שלהם בסקריפטי תצוגה.