это хорошая идея со статическими данными - PullRequest
3 голосов
/ 15 декабря 2011

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

<?php 
    class Database {
        // ... connection upon construction and ways of escaping the data
        public function query($query) {
            // performs query and returns the data.
        }
    }

    class API { // Not actually called api, but for the purposes of this
        private static $database = false;

        public static function GetDatabase() {
            if (static::$database === false) {
                static::$database = new Database(connection information)
            }
            return static::$database;
        }
    }
?>    

У меня также есть много «контроллеров» или адаптеров баз данных, которые выполняют определенныенаборы функциональности.

<?php 
    class UserDBAdapter {
        public function newUser($info) {
            // validates and builds the query statements

            API::GetDatabase()->query($query);
        }
    }
?>

Таким образом, реальный вопрос в том, что мне нужен UserDBAdapter здесь и там через код.Скажем, в паре разных файлов и, возможно, в других контроллерах, и я не хочу передавать это как переменную (это может раздражать, когда есть у каждого метода).Я также не хочу создавать 2 из этих объектов (для целей скорости).

Так что я могу сделать что-то такое же, как и с объектом $ database.Я не инициализирую их до тех пор, пока они не будут вызваны, что должно быть эффективным, и их не нужно создавать заново в течение всего процесса, независимо от объема.По крайней мере, именно поэтому я начал эту идею, но я не знаю, является ли это лучшим идеалом.

Спасибо

Ответы [ 2 ]

2 голосов
/ 15 декабря 2011

Я думаю, что вы делаете хорошо, вы храните соединение с базой данных в реестре, к которому вы можете легко получить доступ в течение всего проекта.

Полагаю, в идеале вы могли бы перезаписать это с помощью методов setDatabase и getDatabaseи в других ваших классах, с API :: getDatabase () в качестве запасного варианта?

В Zend Framework есть Zend_Db_Adapter :: getDefaultAdapter (), который, как я уже знал, используется .. или я назначаю адаптер для реестрас Zend_Registry :: set ('dbAdapter', $ dbAdapter).Я знаю, что вы не используете Zend, но это пример того, как кто-то делает нечто подобное.

0 голосов
/ 15 декабря 2011

Обычно упомянутые вами «контроллеры» управляются как отдельный класс в отдельном файле.

Иногда «синглтоны» - это один единственный элемент, используемый во всех приложениях. И иногда, имеют несколько копий, в зависимости от его использования, и называются «сущностями».

Вы можете узнать больше здесь: http://en.wikipedia.org/wiki/Object-Relational_Mapping

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