PHP: Как передать существующее соединение с базой данных статическим методам класса?

Возможно, необходимо предварительно обработать файлы, таким образом, каждая запись находится в отдельном файле (или по крайней мере что каждый файл является mmap-способным размером).

Также Вы могли сделать все шаги обработки для каждой записи, прежде, чем перейти на следующую? Возможно, это избежало бы некоторых IO наверху?

5
задан 3 revs, 3 users 100% 24 December 2012 в 21:50
поделиться

2 ответа

Я бы использовал и использую для этого одноэлементный шаблон. Я использую класс, который я просто назову здесь Database_Manager:

class Database_Manager
{
    private static $instance;
    private $db_connection;

    public static function getInstance()
    {
        if (self::$instance == null) {
            $className = __CLASS__;
            self::$instance = new $className();
        }
        return self::$instance;
    }

    public static function initializeConnection($connectionInfo)
    {
        $db = self::getInstance();
        //call init functions.. connect to db, etc
            //save connection to $db->db_connection;

    }

    public static function getDb()
    {
        $db = self::getInstance();
        return $db->db_connection;
    }
}

Вы можете настроить все один раз с помощью вызова initializeConnection (), а затем просто вызвать Database_Manager :: getDb () с этого момента.

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

Обратите внимание, что я упустил некоторые мелкие детали реализации Singleton, такие как как объявление функции __construct () частной (большая часть того, что указано выше, скопировано из памяти). Я просто хотел показать общий подход.

10
ответ дан 18 December 2019 в 14:47
поделиться

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

3
ответ дан 18 December 2019 в 14:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: