Простой способ передать объект DB в класс, который расширяется многократно


Рассмотрим следующий 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 таким образом (как я сейчас делаю с именем таблицы и столбцом), однако я никогда не знаю, сколько раз я мог бы расширить класс А и подумал, что должен быть какой-то другой, более легкий путь.

Кто-нибудь знает лучшее решение, которое я мог бы рассмотреть для достижения этой цели?

Заранее спасибо

2 3

2 ответа:

Загляните всинглетный шаблон проектирования . У вас не должно быть необходимости использовать globals, поскольку вы, кажется, знаете, что это не обязательно.

Вы можете использовать статические свойства PHP .

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

Теперь это свойство будет общим для всех экземпляров этого объекта и его дочерних объектов.