Наследование соединения с базой данных в PHP ООП - PullRequest
1 голос
/ 13 мая 2010

Мой абстрактный класс База данных создана для взаимодействия с базой данных , и любой дочерний элемент этого класса (UserDatabase, ActionDatabase, EventDatabase) наследует свое соединение с базой данных , который определяется как static .

abstract class Database {  
    public static $connection;   
    public function __construct( ) {      
        ...  
        $this->connection = mysql_connect( $host, $username, $password );      
    }  
}     
class UserDatabase extends Database {  
    public function verify( ) {
        if ( $this->connection == parent::$connection ) {
            print "true";  
        } else {  
            print "false";  
            print "this:" . $this->connection . " parent:" . parent::$connection;  
        }  
    }    
}  
$instance = new UserDatabase( );  
$instance->verify( );  
// this prints false, as parent::$connection is empty

Означает ли это, что соединение с моей базой данных устанавливается и сохраняется только в памяти один раз и передается подклассам в качестве ссылки без репликации для каждого экземпляра?

Так вы бы реализовали свой ООП-правильный интерфейс базы данных?

Ответы [ 2 ]

2 голосов
/ 13 мая 2010

Игнорирование вашего кода на мгновение и просмотр только вашего описания того, как должна работать эта схема ... Да, соединение с базой данных будет устанавливаться только один раз для каждого сценария PHP и не будет дублироваться для каждого экземпляра.

Является ли это хорошей идеей или нет, зависит от ваших подклассов. Каждый класс должен иметь одну ответственность. Пока единственная ответственность подклассов - взаимодействие с БД, вы, вероятно, в порядке. (Посмотрите на Шаблон репозитория для объяснения того, как это обычно делается.) Если ваш класс User расширяет базу данных, чтобы он мог хранить себя, вы перешли черту и пишете классы, которые будут иметь слишком много зависимостей и обязанностей.

Что касается вашего кода ... Почти каждая строка вашего кода неверна. Вы не можете инициализировать переменные класса с результатами функции. Ваш SQL неверен. Линия $connection ? "connected" : "not connected"; ничего не делает. Почти ничего из этого не должно быть сделано в конструкторе. И т.д.

1 голос
/ 13 мая 2010

С этим шаблоном все в порядке, если вы ничего не делаете с этими классами, кроме взаимодействия с базой данных.

В противном случае вам может быть лучше с классом Database, который создается один раз, и вы можете использовать getInstance () каждый раз. Шаблон синглтон дизайна.

http://www.tonymarston.net/php-mysql/singleton.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...