# Zend_View_Abstract

`Zend_View_Abstract` הינו מחלקת הבסיס עליה `Zend_View` מבוססת; `Zend_View` בעצמה בסך הכל מרחיבה אותה ומגדירה את המתודה `_run()` (אשר מיוחסת לאחר מכן אל `render()`).

מתכנתים רבים רוצים להרחיב את `Zend_View_Abstract` ולהוסיף פונקציונליות מותאמת אישית, ובאופן בלתי נמנע נתקלים בבעיות עם העיצוב שלה, המסמך הזה נועד להצגת ההחלטות מאחורי עיצוב הרכיב הזה.

`Zend_View` היא סוג של אנטי-מנוע-טמפלייטס בכך שהיא משתמשת ב PHP בתור מנוע טמפלייט. כתוצאה מכך כל הפונקציות של PHP קיימות, וסקריפטים של תצוגה מקבלים את כל האובייקטים הקיימים.

`Zend_View::_run()` מבצע את הדבר הבא:

    protected function _run()
    {
        include func_get_arg(0);
    }

לכן, סקריפטים של התצוגה יכולים לגשת לאובייקט הנוכחי (`$this`), וכל המתודות או המשתמשים של אותו אובייקט. מאחר וכמה פעולות מבוססת על משתמשים עם גישה וראות מסויימת, זה גורם לבעיה: סקריפט התצוגה יכול לקרוא למתודות מסויימות שהוא לא אמור או לדרוס הגדרות ישירות. לדוגמא תארו לעצמכם שסקריפט התצוגה ידרוס את `$_path` או `$_file` -- כל קריאות נוספות ל `render()` לא יפעלו.

למרבה המזל, PHP 5 מכילה פתרון לבעיה זו עם הגדרות הראות שלה: משתמשים פרטיים לא ניתנים לגישה או דריסה על ידי אובייקט אשר מרחיב מחלקה מסויימת. זה הוביל לעיצוב המחלקה הנוכחית: מאחר ו `Zend_View` מרחיב את `Zend_View_Abstract`, סקריפטי תצוגה מוגבלים רק למתודות וערכים ציבוריים ומוגנים של `Zend_View_Abstract` -- ולמעשה מגבילים את האפשרויות והפעולות שניתן לבצע, ומאפשר לנו לאבטח איזורים קריטיים במערכת מפני שימוש לא נכון או לא תקני שלהם בסקריפטי תצוגה.