طريقة سهلة لتمرير كائن DB إلى فئة تم تمديدها عدة مرات

StackOverflow https://stackoverflow.com/questions/3631860

  •  26-09-2019
  •  | 
  •  

سؤال

النظر في رمز PHP التالي:

<?php
require_once("myDBclass.php");
class a {
    private $tablename;
    private $column;
    function __construct($tableName, $column) {
        $this->tableName = $tablename;
        $this->column = $column;        
    }

    function insert() {
        global $db;
        $db->query("INSERT INTO ".$this->tableName." (".$this->column.") VALUES (1)");  
    }       
}

class x extends a {
    function __construct() {
        parent::construct("x", "colX"); 
    }
}

class y extends a {
    function __construct() {
        parent::construct("y", "colY"); 
    }
}
?>

لديّ كائن $ dB الخاص بي الذي تم إنشاء مثيل له في ملف آخر ، لكنني أرغب في نقل هذا بطريقة ما إلى وظائف الفئة A دون استخدام الكلمة الرئيسية العالمية في كل مرة أقوم فيها بتحديد وظيفة جديدة في الفصل "A".

أعلم أنه يمكنني القيام بذلك عن طريق تمرير كائن DB عند إنشاء فئة X و Y ، ثم تم نقله إلى الفئة A بهذه الطريقة (مثل IM حاليًا مع اسم Tablename وعمود) ، لكنني لا أعرف أبدًا عدد المرات التي يمكنني فيها تمديد الفصل وأعتقد أنه يجب أن يكون هناك طريقة أخرى أسهل بطريقة أو بأخرى.

هل يعرف أي شخص حل أفضل يمكنني التفكير فيه لتحقيق ذلك؟

شكرا لك مقدما

هل كانت مفيدة؟

المحلول

انظر إلى نمط تصميم Singleton. يجب ألا تحتاج إلى استخدام globals, ، كما يبدو أنك تعلم أنه ليس ضروريًا.

نصائح أخرى

يمكنك استخدام PHP's خصائص ثابتة.

class A {
    static $db;
    public static function setDB($db) {
        self::$db = $db;
    }
}

الآن سيتم مشاركة الممتلكات في جميع حالات هذا الكائن وأطفالها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top