הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   משהו מוזר בהורשה בPHP (https://hosts.co.il/forums/showthread.php?t=89200)

link 26-04-11 00:50

אני בעקרון חושב על מצב שבו יש מחלקה כללית עם משתנה מחלקה, נניח $std כמו בipb בזמנו. ב$std הזה יש משתנה SQL, ויש שם משתנה של שפה ועוד כל מיני. נניח ויש מפתח חיצוני למערכת שרוצה לגשת למשתנה $std->sql לתוך מחלקה שהוא יצר כרגע. הפתרון הרגיל שאני מכיר הולך ככה:

PHP קוד:

class new_class
{
    function 
some_action()
    {
        global 
$std;

        
$std->sql->bla(...);
    }


עכשיו, מה שאני רציתי לעשות עם ההורשה הוא פשוט לעשות $this->sql, שפשוט מבוסס על המחלקה הקודמת. לזה אני מתכוון לאינטראקציה בין מחלוקות.ניסיתי גם האופורטור parent:: אבל הוא גם לא צלח, לפחות בקטע של משתני מחלקה.

בניה 26-04-11 02:44

אחת מהשיטות לשתף אובייקטים בין כל הקוד שלך זו מחלקה שכל התוכן שלה(או רובו) סטטים.
אני אתן דוגמא למה שעשיתי באתר שלי(misron)
המערכת שלי רחוקה מלהיות מושלמת מבחינת התכנון שלה אבל אפשר ללמוד ממנה את העקרון.
PHP קוד:

class Misron {
    
    static public 
$conf = array();
    
    static public 
$browser 'default';
    
    static public 
$page_start_mtime;
    
    static public 
$page_end_mtime;
    
    static public 
$db;
    
}

Misron::$db = new DB();

//now i want to use the db within a function :
function myfunc() {
    
$res Misron::$DB->query();
    
print_r($res->fetchAll());



link 26-04-11 08:57

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

פתרון נוסף זה לעשות כזה דבר:
PHP קוד:

$new_model = new model_class(&$std); 

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

תודה רבה על העזרה לכל מי שהשתתף בדיון הקולח הזה :)

Shay Ben Moshe 26-04-11 12:53

תקרא על Design pattern שנקרא Singleton.
יכול להיות שגם Dependency injection יעזור לך.
בהצלחה.


כל הזמנים הם GMT +2. הזמן כעת הוא 13:08.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ