Intereting Posts
Соединение NSURLConnection с сервером, но не размещение данных Кнопка «Назад браузера» перенаправляется на 1-ю страницу, пока она должна перейти на предыдущую посещенную страницу при использовании пейджинга Cakephp 3.0 Login возвращает false каждый раз почему мой загруженный файл поврежден или поврежден? Есть ли хорошие учебники по использованию PDO? Сравнение PHP с почтовым индексом PHP Создание нового процесса для каждого запроса веб-страницы? Готовый отчет PHP PDO – запрос MySQL LIKE Почему я получаю такие точные результаты от `filesize`? Ошибка Cron Daemon с заданием PHP Cron Импорт CSV с разрывами строк в реальных полях Почему я получаю «Идентификатор ресурса №4» при применении print_r () к массиву в PHP? Преобразование плоского массива в иерархический многомерный массив (403) Доступ не настраивается при добавлении события в календарь PHP: «встречается некорректное числовое число»

Создание глобального объекта MySQLi

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

$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME); 

где константы DB_SERVER, DB_USER, DB_PASS, DB_NAME являются переменными базы данных, определенными в глобально доступном файле. В последнее время мой сайт начал медленно, и после профилирования скрипта я понял, что вызов создания объекта ($ mysqli) вызывал эту проблему.

Большинство моих классов простираются от mysqli, так что

 public function __construct($user_id) { parent::__construct(DB_SERVER, DB_USER, DB_PASS, DB_NAME); $this->retrieve_user_details($user_id); $this->check_user_account_type(); } 

Насколько я понимаю, статические методы НЕ используют метод __construct.

Мог ли кто-нибудь помочь мне в том, как я могу создать объект $ mysqli один раз, чтобы к нему можно было получить доступ ко всем статическим методам, которые его требуют.

Related of "Создание глобального объекта MySQLi"

Вот один из подходов:

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

 class DBConnector { private static $instance ; public function __construct($host, $user, $password, $db){ if (self::$instance){ exit("Instance on DBConnection already exists.") ; } } public static function getInstance(){ if (!self::$instance){ self::$instance = new DBConnector(a,b,c,d) ; } return $instance ; } } 

Примером может служить:

 $mysqli = DBConnector::getInstance() ; 

Hovewer Я предлагаю использовать другое решение :

 $mysqli = new MySQLi(a,b,c,d) ; 

Затем вы можете передать этот объект другим классам (конструктору)

 class Shop { private $mysqli ; public function __construct(MySQLi $mysqli){ $this->mysqli = $mysqli ; } } $show = new Shop($mysqli) ; 

Чтобы продумать одноэлемент mysqli:

 define('SERVER', 'localhost'); define('USERNAME', 'root'); define('PASSWORD', 'password'); define('DATABASE', 'databaseName'); class mysqliSingleton { private static $instance; private $connection; private function __construct() { $this->connection = new mysqli(SERVER,USERNAME,PASSWORD,DATABASE); } public static function init() { if(is_null(self::$instance)) { self::$instance = new mysqliSingleton(); } return self::$instance; } public function __call($name, $args) { if(method_exists($this->connection, $name)) { return call_user_func_array(array($this->connection, $name), $args); } else { trigger_error('Unknown Method ' . $name . '()', E_USER_WARNING); return false; } } } 

Затем вы можете запросить соединение с базой данных, позвонив:

 $db = mysqliSingleton::init(); 

Затем вы можете восстановить соединение с базой данных в своих собственных объектах:

 class yourClass { protected $db; public function __construct() { $this->db = mysqliSingleton::init(); } } 

Это самая короткая версия, которую я мог бы придумать для Bootstrap 3.

  $(document).ready(function() { if (hash = window.location.hash) { $('.nav-tabs a[href="' + hash + '"]').tab('show'); } });