בנאים

זהירות

ב PHP 3 ו PHP 4 לפונקציות הבנאיות מתנהגות בצורה שונה . הסמנטיקה של PHP 4 עדיפה בהרבה .

בנאים הם פונקציות במחלקה שמופעלים אוטומטית כשיוצרים מופע חדש של המחלקה ( בעת יצירת אובייקט חדש ) תוך שימוש במילה new . ב PHP 3 , פונקציות מוגדרות כבנאיות כשהן נקראות בשם הזהה לשם המחלקה . ב PHP 4 , פונקציות משמשות כבנאיות , כשהן בעלות אותו שם של מחלקה שהן מוגדרות בתוכן - ההבדל הוא לכאורה קטן , אבל קריטי (ראה למטה ) .

 
/

 
/

 
עובד

 
ב

 
PHP

 
3

 
וגם

 
ב

 
PHP

 
4

 
.

 
class

 
Auto_Cart

 
extends

 
Cart

 
{

 
function

 
Auto_Cart(

 
)

 
    {

 
$this

 
-

 
add_item

 
("10"

 
,

 
1)

 
;

 
    }

 
}



בודגמא הוגדרה מחלקה Auto_Cart שהיא Cart ובנוסף לה בנאי שמאתחל את העגלה עם ריט אחד של מוצר שמספרו " 10 " בכל פעם שיוצרים מופע חדש של Auto_Cart בעזרת "new " . הפנקציה הבנאית יכולה לקחת ארגומנטים שהם אופציונליים , מה שגורם להם להיות שימושיים במיוחד . על מנת שאפשר יהיה להשתמש בפונקציה בלי פרמטרים , כל הפרמטרים שמועברים לבנאי צריכם להקבע אופציונלית על ידי אספקת ערכי ברירת מחדל .

 
/

 
/

 
עובד

 
גם

 
ב

 
PHP

 
3

 
וגם

 
ב

 
PHP

 
4

 
.

 
class

 
Constructor_Cart

 
extends

 
Cart

 
{

 
function

 
Constructor_Cart($item

 
=

 
"10"

 
,

 
$num

 
=

 
1

 
)

 
    {

 
$this

 
-

 
add_item

 
($item

 
,

 
$num)

 
;

 
    }

 
}

 
/

 
/

 
Shop

 
the

 
same

 
old

 
boring

 
stuff

 
.

 
$default_cart

 
=

 
new

 
Constructor_Cart

 
;

 
/

 
/

 
Shop

 
for

 
real..

 
.

 
$different_cart

 
=

 
new

 
Constructor_Cart("20"

 
,

 
17)

 
;



זהירות

ב PHP 3 , למחלקות ובנאים נגזרים יש כמה מגבלות . הדוגמא הבאה צריכה להקרא בזהירות על מנת שההגבלות יהיו מובנות .




ב PHP 3 , שום פונקציה בנאית לא נקרא בדוגמא הנ" ל . החוק ב PHP 3 הוא : 'הבנאי A הוא הפונקציה של אותו שם של המחלקה .'. השם של המחלקה הוא B , ואין שום פונקציה שנקראת B( ) במחלקה B . לכן כלום לא קורה .

עניין זהב תוקן ב PHP 4 על ידי הכללת חוק חדש : אם למחלקה אין פונקציה בנאית , הפונקציה בנאית של מחלקת הבסיס נקראת , אם היא קיימת . בדוגמא מעל , ב PHP4 בעת יצירת האוייבקט יודפס הפלט : ' I am the constructor of A . br ' .




ב PHP 3 , הפונקציה B( ) שבמחלקה A לפתע תהפוך לבנאית במחלקה B , למרות שלא לזה "התכוון המשורר" . החוק ב PHP 3 הוא : 'הבנאי A היא הפונקציה בעלת אותו שם של המחלקה . '.ל PHP 3 לא איכפת אם הפונקציה הוגדרה במחלקה B , או הם היא נגזרה ממחלקה A .

גם עניין זה תוקן ב PHP 4 על ידי יצירת החוק הבא : ' הפונקציה הנבאית A היא פונקציה בעלת אות שם של המחלקה שהיא מוגדרת בתוכה . 'לכן ב PHP 4 , המחלקה B שאין לה את הבנאית של עצמה תשתמש בפונקציה הבנאית של מחלקת הבסיס , ולפיכך יודפס על המסך 'I am the constructor of A . br ' .

זהירות

לא PHP 3 ולא PHP 4 קוראים לבנאי של מחלקת הבסיס אוטומטית מבנאי של מחלקה נגזרת . זה באחריות המשתמש לקורא לפונקציה הבנאית של מחלקת הבסיס במקרה כזה .

הערה : אין " פונקציה הורסת " (destructors ) ב PHP 3 או PHP 4 . אתה יכול להשתמש ב register_shutdown_function( ) במקום זאת לדמות את רוב האספקטים של "פונקציה הורסת " (ההפיך מבנאית ) .

" פונקציה הורסת " היא פונקציה שנקראת אוטמטית כאשר "משמידים " אובייקט , אם על ידי שימוש ב unset( ) ואם פשוט על ידי יציאה מחוץ לתחום של האובייקט . כמו שנאמר , אין פונקציות מסוג זה ב PHP .