colshrapnel / safemysql

A real safe and convenient way to handle MySQL queries.
Apache License 2.0
395 stars 197 forks source link

Update safemysql.class.php #31

Closed pafnuty closed 8 years ago

pafnuty commented 9 years ago

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

В проекте у меня используется так:

class ClassName
{
    public function __construct()
    {
        $this->db = $this->getDb();
    }
    public function getDb()
    {
        return SafeMySQL::getInstanse(array(
            'host'    => DBHOST,
            'user'    => DBUSER,
            'pass'    => DBPASS,
            'db'      => DBNAME,
            'charset' => COLLATE,
        ));
    }
}
globalmac commented 9 years ago

По всей видимости, причина использования была в том, чтобы гарантировать существование только одного экземпляра класса. Обычно singleton используют для хранения неизменных данных, обёрток по работе с БД и т.д.

Я у себя тоже модифицировал, сразу же как начал данный класс использовать=).

pafnuty commented 9 years ago

@blind-cobra думаю да, т.к. на странице могло быть несколько вызовов класса ClassName и из-за этого возникала ошибка. Значит не мне одному полезна такая модификация :smile:

pafnuty commented 8 years ago

Решил вопрос немного иначе:

class DbClass extends SafeMySQL {
    public static function init($options = []) {
        static $db;
        if (!is_object($db)) {
            $db = new DbClass($options);
        }
        return $db;
    }
}

А уже там, где необходимо делаю:

class Main {
    public $db;
    function __construct() {
        $this->db = DbClass::init([
            'host'    => DBHOST,
            'user'    => DBUSER,
            'pass'    => DBPASS,
            'db'      => DBNAME,
            'charset' => COLLATE,
        ]);
    }
}