Forum und email

::

Caution

הקטע הבא תקף ל PHP 4 בלבד.

לעיתים זה שימושי לבצע ייחוס למשתנים ופונקציות במחלקת הבסיס או להשתמש בייחוס לפונקציות אשר נמצאות במחלקות שעדיין לא יצרנו להן מופע (עדיין לא מומש להן אובייקט). האופרטור :: משמש לביצוע משימה זאת.

class A
{
    function example()
    {
        echo "I am the original function A::example().<br>\n";
    }
}

class B extends A
{
    function example()
    {
        echo "I am the redefined function B::example().<br>\n";
        A::example();
    }
}

// אין אובייקט למחלקה A.
// מה שהולך להיות מודפס לסמסך זה:
//   I am the original function A::example().<br>
A::example();

// יצירת אובייקט (שהוא "מופע") למחלקה B.
$b = new B;

// מה שיודפס כתוצאה מכך זה:
//   I am the redefined function B::example().<br>
//   I am the original function A::example().<br>
$b->example();

הדוגמא שלמעלה קוראת לפונקציה example() שבתוך המחלקה A, אבל אין אובייקט למחלקה A, ולפיכך לא ניתן לכתוב $a->example() או משהו דומא. במקום זאת קראנו לפונקציה example() כ 'פונקצית מחלקה', כלומר, היא משמשת כפונקציה של המחלקה עצמה, ללא אוביקט כלשהו של אותה מחלקה.

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

בדוגמא שמעל, המחלקה B מגדירה מחדש את הפונקציה example(). ההגדרה המקורית בתוך המחלקה A "מוצללת" ולא מתקיימת למעשה, עד אשר מייחסים ספציפית למימוש של example() שבתוך המחלקה A תוך שימוש באופרטור :: . הכתיבה של A::example() עושה זאת (למעשה, רצוי לכתוב: parent::example(), כפי שיודגם בחלק הבא).

בהקשר זה, נוצר אובייקט וייתכן שיהיו לו משתני אובייקט. לכן, כשמשתמשים במשתנים מתוך פונקצית האובייקט, אפשר להשתמש ב $this ובמשתני המחלק.