![]() |
משהו מוזר בהורשה בPHP
שלום לכולם,
ניסיתי לעשות איזו בדיקה קטנה בPHP בנוגע להורשות ומסתבר שמשהו מתפקשש ואני לא מבין למה. עשיתי מחלקה עם איזה סתם משתמש וכשאני עושה מחלקה שמקבלת בהורשה מהמחלקה הקודמת, המחלקה החדשה לא מדפיסה לי את המשתמש של המחלקה המקורית. להלן הקוד: PHP קוד:
תודה רבה, רועי. |
כי זה לא באותו מופע.
הורשה לא מחברת בין כל המופעים של המחלקות, רק מורישה את התכונות של המחלקה. זה בדיוק כמו ליצור שני מופעים של אותה מחלקה ולצפות שערכים שהוזנו כקלט במופע אחד יהיו זמינים במופע אחר. אם תגדיר את המשתנה כstatic יש מצב שזה יעבוד,גם זה לא בטוח אם הוא יהיה זמין במחלקה יורשת. |
אוקי, אז אם אין לי אפשרות לגשת למשתנים מהמחלקה הקודמת - אז למה להוריש?
|
המטרה של הורשה זה לא לגשת למופעים אחרים אלא למחזר את הקוד של המחלקה הקודמת.
PHP קוד:
|
לא התכוונתי למה מבחינת תכנות, הרי למה לך לרשת דברים אם אתה לא יכול למחזר אותם.
נגיד ומתי שהו לפני ההורשה הגדירו ערך חדש למשתנה מחלקה והמחלקה המורישה לא תוכל להסתמך ע"פ הערך החדש כי היא לא יכולה לגשת לשם אז יש פה בעיה מסוימת בקוד. הרעיון המקורי היה שנגיד שישנה מחלקה מרכזית ואז רוצים לעשות עוד מחלקה אז לא לעשות global למשתנה שאליו הגדרת את המחלקה(אותו משתנה שמוצמד למילה new) אלא פשוט לעשות extends. בכול מקרה, לא משנה. תודה על העזרה בכל מקרה. |
תשתמש בsuper(), או בPHP - פשוט תקרא שוב לconstructor. תכתוב $this->test() בתוך הקונסטרטור של המחלקה היורשת.
|
כן, אבל אם שינית את אחד הערכים של המשתנים במחלקה הראשית המחלקה המורישה לא תקבל אותם, למרות שאתה מבצע את ההורשה אחרי שינוי הערך.
|
לא. אתה טועה לחלוטין. פיספסת את כל היסודות של תכנות מונחה עצמים.
בקצרה - יש לך מחלקות שמייצגות טיפוסי נתונים (test וsecond). יש לך מופעים שהם אובייקטים של המחלקה ($bellboy ו$bellgirl). אין קשר בין המופעים השונים של המחלקה, והם אינם משפיעים זה על זה. ההורשה היא לא בין מופעים אלא בין מחלקות. אם אתה רוצה אתה יכול להיכנס לבלוג שלי, פרסמתי סדרת פוסטים על תכנות מונחה עצמים נכנסתי שם לכל נושא לעומק. http://www.xn----0hcb6acyq1epc.com/%...3%D7%A7%D7%A1/ |
אוקי, בוא לא נקרא לזה הורשה. אין דרך בPHP לתקשר בין מחלוקות. ז"א - לבצע אינטראקציה בין מחלוקות? ואני לא מתכוון בדרך עקיפה עם משתנים שמועברים בעקיפין.
|
מה הכוונה לתקשר בין מחלקות?
אם אתה מכיר שפה שבה הדבר שאתה מדבר עליו קיים אתה מוזמן לרשום כאן דוגמת קוד, שנבין במה מדובר. |
אני בעקרון חושב על מצב שבו יש מחלקה כללית עם משתנה מחלקה, נניח $std כמו בipb בזמנו. ב$std הזה יש משתנה SQL, ויש שם משתנה של שפה ועוד כל מיני. נניח ויש מפתח חיצוני למערכת שרוצה לגשת למשתנה $std->sql לתוך מחלקה שהוא יצר כרגע. הפתרון הרגיל שאני מכיר הולך ככה:
PHP קוד:
|
אחת מהשיטות לשתף אובייקטים בין כל הקוד שלך זו מחלקה שכל התוכן שלה(או רובו) סטטים.
אני אתן דוגמא למה שעשיתי באתר שלי(misron) המערכת שלי רחוקה מלהיות מושלמת מבחינת התכנון שלה אבל אפשר ללמוד ממנה את העקרון. PHP קוד:
|
כן, זה גם מה שאני עשיתי. אבל נגיד, במערכת שאני מתכנן יש לי מחלקה ואני עשיתי גם מודל. ז"א, מתכנת חיצוני יוכל לכתוב "תוספים".
אני רוצה, במידה והוא ירצה להסתמך על המחלקה של הSQL והמחלקה המרכזית של המערכת שהוא לא יצטרך להסתמך על משתנים שיישמתי אותם למחלקה, קרי $std. אלא פשוט יעשה הורשה של המחלקה הראשית למחלקה החדשה. אבל לא משנה, הבנתי מניסיון וגם מהנושא הזה שלא אפשרי. פתרון נוסף זה לעשות כזה דבר: PHP קוד:
תודה רבה על העזרה לכל מי שהשתתף בדיון הקולח הזה :) |
תקרא על Design pattern שנקרא Singleton.
יכול להיות שגם Dependency injection יעזור לך. בהצלחה. |
כל הזמנים הם GMT +2. הזמן כעת הוא 10:34. |
מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ