זהירות
|
ב
PHP
3
ו
PHP
4
לפונקציות
הבנאיות
מתנהגות
בצורה
שונה
.
הסמנטיקה
של
PHP
4
עדיפה
בהרבה
.
|
בנאים
הם
פונקציות
במחלקה
שמופעלים
אוטומטית
כשיוצרים
מופע
חדש
של
המחלקה
(
בעת
יצירת
אובייקט
חדש
)
תוך
שימוש
במילה
new
.
ב
PHP
3
,
פונקציות
מוגדרות
כבנאיות
כשהן
נקראות
בשם
הזהה
לשם
המחלקה
.
ב
PHP
4
,
פונקציות
משמשות
כבנאיות
,
כשהן
בעלות
אותו
שם
של
מחלקה
שהן
מוגדרות
בתוכן
-
ההבדל
הוא
לכאורה
קטן
,
אבל
קריטי
(ראה
למטה
)
.
בודגמא
הוגדרה
מחלקה
Auto_Cart
שהיא
Cart
ובנוסף
לה
בנאי
שמאתחל
את
העגלה
עם
ריט
אחד
של
מוצר
שמספרו
"
10
"
בכל
פעם
שיוצרים
מופע
חדש
של
Auto_Cart
בעזרת
"new
"
.
הפנקציה
הבנאית
יכולה
לקחת
ארגומנטים
שהם
אופציונליים
,
מה
שגורם
להם
להיות
שימושיים
במיוחד
.
על
מנת
שאפשר
יהיה
להשתמש
בפונקציה
בלי
פרמטרים
,
כל
הפרמטרים
שמועברים
לבנאי
צריכם
להקבע
אופציונלית
על
ידי
אספקת
ערכי
ברירת
מחדל
.
זהירות
|
ב
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
.