Простой способ передать объект БД в класс, который расширяется много раз - PullRequest
3 голосов
/ 03 сентября 2010

Рассмотрим следующий код 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, не используя ключевое слово global каждый раз, когда я определяю новую функцию в классе "a".

Я знаю, что могу сделать это, передав объект DB при создании экземпляров класса X и Y, а затем передать его классу A таким образом (как я сейчас делаю с именем таблицы и столбцом), однако я никогда не знаю, сколько раз я мог бы расширить класс А и подумать, что должен быть какой-то другой более простой способ.

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

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

Ответы [ 2 ]

2 голосов
/ 03 сентября 2010

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

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

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

1 голос
/ 03 сентября 2010

Посмотрите на Singleton Design Pattern .У вас не должно быть необходимости использовать globals, так как вы, кажется, знаете, что в этом нет необходимости.

...