מה גובר: קוסטרקטור או העתקת אובייקט ?

מה גובר: קוסטרקטור או העתקת אובייקט ?

נתקלתי במקרה עם PDO שלא הצלחתי לצאת ממנו...
יש לי class עם constructor שמציב ערך לאחד המשתנים של המחלקה נקרא ל barb$...
כשאני מריץ שאילתת PDO אני שולף כל רשומה כאובייקט של המחלקה באמצעות fetchObject שכידוע מקבל את מבנה האובייקט מ ()get_called_class.
הבעיה: הקונסטרקטור מאתחל את המשנה barb$ ולכן כאשר מתבצעת העתקת פרמטרים של fetchObject הוא לא מתעדכן ונשאר עם אותו ערך...
מה שיוצא: שבכל הרשומות/אובייקטים המשתנה/שדה barb$ מקבלים את אותו ערך !
וזה לא טוב

למישהו יש רעיון מה לעשות ?
 

bnayal

New member
מוזר, הם אומרים שזה סודר עוד ב 5.2

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

itaym02

New member
זה לא bug זה by design

ואם תחשוב על זה, יש בזה הרבה הגיון. סדר הפעולות
1. הערכים מהDB מאכלסים את האובייקט
2. הקונסטרקטור רץ

תתאים את הלוגיקה שלך למצב הזה.
 
זה הגיון לא לא הגיוני...אסביר

כדי ש"הערכים מהDB מאכלסים את האובייקט" צריך שיהיה קודם כל אובייקט...
כלומר לפני הצבת ערכים נוצר אובייקט כלומר הקונסטרקטור רץ, ורק אח"כ מתרחשת הצבת ערכים.
אבל אם נשאר ערך ראשוני למשתנה, סביר יותר להניח שכאשר מתבצעת ההצבה - רצה לולאה על משתני האובייקט ומדלגת על משתנים שיש בהם כבר ערך...
הלוגיקה הזאת אולי מתאימה לאובייקטים שלא לא תלויים ב-DB, ואז היא אכן הגיונית.
אבל לאובייקטים שכן תלויים ב-DB סביר שתרצה לדרוס את הערכים בהתאם למה שנשמר ב-DB כי עפ"י רוב האיתחול מהקונסטרקטור נועד לייצר defualt לזמן הזנת הנתונים למערכת.
 

bnayal

New member
נשמע כמו ביצה ותרנגולת

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