Эта статья иллюстрирует применение одноэлементного режима PHP. Поделитесь для вашей справки следующим образом:
В прошлом, когда я начинал работать, я часто подключался к базе данных. Каждый раз, когда я использовал базу данных, я использовал new для создания экземпляра и подключения один раз. В то время, поскольку количество подключений к базе данных было не очень частым, так что это было ничего. Позже супервайзер сказал мне, что если я буду подключаться к базе данных каждый раз, когда я часто читаю данные, давление на базу данных и систему будет большим. Позвольте мне выяснить, могу ли я подключиться к базе данных один раз, а затем использовать ее снова без нового подключения. В то время я никогда не думал о хорошем способе. Только когда я недавно узнал о режиме одноэлементного, я вдруг понял. Руководитель посоветовал мне использовать модель синглтона только потому, что я раньше не понимал модель разработки. Ну, говори поменьше глупостей. Давайте посмотрим на модель синглтона.
Одноэлементная модель (Модель ответственности):
Проще говоря, объект (прежде чем изучать шаблоны проектирования, ему необходимо понять объектно-ориентированные идеи) отвечает только за конкретную задачу;
Синглеты:
1. Конструктор должен быть помечен как private
(Контроль доступа: Запретить внешнему коду создавать объекты с использованием новых операторов). Одноэлементные классы не могут быть созданы в других классах, но могут быть созданы только сами по себе.
2. Статические переменные-члены с экземпляром сохраненного класса
3. Наличие общего статического метода для доступа к этому экземпляру (обычно используется) getInstance()
Метод для создания экземпляра одноэлементного класса с помощью instanceof
Операторы могут определить, был ли создан экземпляр класса
Кроме того, вам необходимо создать __clone()
Метод для предотвращения копирования (клонирования)объектов
Зачем использовать одноэлементный режим PHP?
1. Применение PHP в основном лежит в приложении базы данных, поэтому в приложении будет выполняться большое количество операций с базой данных. Использование режима с одним регистром позволяет избежать большого количества операций с базой данных. новые
Ресурсы, потребляемые операциями.
2. Если в системе необходим класс для глобального управления некоторой информацией о конфигурации, его можно легко реализовать с помощью одноэлементного режима. Это можно увидеть в разделе фронтальный контроллер ZF.
3. В запросе страницы легко отлаживать, потому что весь код (например, класс операций с базой данных db) сосредоточен в одном классе. Мы можем устанавливать крючки в классе и выводить журналы, таким образом избегая везде. var_dump
, эхо
。
Код (в официальных документах):
Результат:
Я создан! Гав! Фатальная ошибка: Клонирование не допускается. в E:\APMServ5.2.6\www\htdocs\Lee\myprogram\other\class\singletons.phpon строка 31
Следующий контент поступает из Интернета (вы можете ознакомиться с ним и узнать о нем):
Три основных момента одноэлементной модели:
(1) Требуется статическая переменная-член, содержащая уникальный экземпляр класса:
private static $_instance;
(2) Конструкторы и клоны должны быть объявлены закрытыми, чтобы новые классы внешних программ не теряли смысла одноэлементного шаблона:
private function __construct() { $this->_db = pg_connect('xxxx'); } private function __clone() { }// Overlay _clone() method, prohibit cloning
(3). Должен быть предоставлен общий статический метод доступа к этому экземпляру (обычно getInstance
Метод для возврата ссылки на уникальный экземпляр
public static function getInstance() { if(! (self::$_instance instanceof self) ) { self::$_instance = new self(); } return self::$_instance; }
2. Зачем использовать одноэлементную модель?
1. Недостатки PHP:
PHP-это интерпретирующий язык сценариев. Этот механизм позволяет интерпретировать и выполнять каждую страницу PHP, а все связанные с ней ресурсы будут переработаны. Другими словами, PHP не имеет возможности хранить объект в памяти на уровне языка, который отличается от скомпилированного типа, такого как asp. СЕТЬ и Java. Например, синглтон в Java всегда будет существовать на протяжении всего жизненного цикла приложения. Переменные находятся на межстраничном уровне. Это действительно может обеспечить уникальность этого экземпляра в жизненном цикле приложения. Однако в PHP все переменные, будь то глобальные переменные или статические члены классов, находятся на уровне страницы. Каждый раз при выполнении страницы новые объекты будут восстанавливаться и очищаться после выполнения страницы. Таким образом, кажется, что режим одноэлементного PHP не имеет смысла, поэтому я думаю, что режим одноэлементного PHP имеет только несколько сценариев приложений для одного запроса на уровне страницы. Очень важно совместно использовать один и тот же ресурс объекта.
2. Применение одноэлементного режима в PHP:
(1) Взаимодействие между приложением и базой данных
В приложении будет много операций с базой данных, таких как подключение к базе данных через дескриптор базы данных. Использование одноэлементного режима позволяет избежать множества новых операций, потому что каждый раз. новые
Операции потребляют как память, так и системные ресурсы.
(2) Информация о конфигурации управления
Если в системе необходим класс для глобального управления некоторой информацией о конфигурации, можно легко реализовать одноэлементный режим.
3. Как реализовать синглетную модель?
1. Общие примеры доступа к базе данных:
addUserInfo(...); ...... // Access the database in the function to find user information function getUserInfo() { $db = new DB (...); // New database class again, and establish a connection to the database $db = query (...);// Access the database based on query statements } ?>
2. Используйте одноэлементный режим для работы с базой данных:
_db = pg_connect(...);//postgrsql } Private function clone () {}; // Overlay clone () method, prohibit cloning public static function getInstance() { if(! (self::$_instance instanceof self) ) { self::$_instance = new self(); } return self::$_instance; } public function addUserInfo(...) { } public function getUserInfo(...) { } } //test $db = DB::getInstance(); $db->addUserInfo(...); $db->getUserInfo(...); ?>
3. Глубокое Понимание
conn = mysql_connect($db['host'],$db['user'],$db['password']); if(!mysql_select_db($db['database'],$this->conn)){ Echo "failure"; }; mysql_query('set names utf8',$this->conn); } public static function getInstance(){ if(is_null(self::$instance)){ self::$instance = new db; } return self::$instance; } /** * Query the database */ public function select($table,$condition=array(),$field = array()){ $where=''; if(!empty($condition)){ foreach($condition as $k=>$v){ $where.=$k."='".$v."' and "; } $where='where '.$where .'1=1'; } $fieldstr = ''; if(!empty($field)){ foreach($field as $k=>$v){ $fieldstr.= $v.','; } $fieldstr = rtrim($fieldstr,','); }else{ $fieldstr = '*'; } self::$sql = "select {$fieldstr} from {$table} {$where}"; $result=mysql_query(self::$sql,$this->conn); $resuleRow = array(); $i = 0; while($row=mysql_fetch_assoc($result)){ foreach($row as $k=>$v){ $resuleRow[$i][$k] = $v; } $i++; } return $resuleRow; } /** * Add a record */ public function insert($table,$data){ $values = ''; $datas = ''; foreach($data as $k=>$v){ $values.=$k.','; $datas.="'$v'".','; } $values = rtrim($values,','); $datas = rtrim($datas,','); self::$sql = "INSERT INTO {$table} ({$values}) VALUES ({$datas})"; if(mysql_query(self::$sql)){ return mysql_insert_id(); }else{ return false; }; } /** * Modify a record */ public function update($table,$data,$condition=array()){ $where=''; if(!empty($condition)){ foreach($condition as $k=>$v){ $where.=$k."='".$v."' and "; } $where='where '.$where .'1=1'; } $updatastr = ''; if(!empty($data)){ foreach($data as $k=>$v){ $updatastr.= $k."='".$v."',"; } $updatastr = 'set '.rtrim($updatastr,','); } self::$sql = "update {$table} {$updatastr} {$where}"; return mysql_query(self::$sql); } /** * Delete records */ public function delete($table,$condition){ $where=''; if(!empty($condition)){ foreach($condition as $k=>$v){ $where.=$k."='".$v."' and "; } $where='where '.$where .'1=1'; } self::$sql = "delete from {$table} {$where}"; return mysql_query(self::$sql); } public static function getLastSql(){ echo self::$sql; } } $db = db::getInstance(); //$list = $db->select('demo',array('name'=>'tom','password'=>'ds'),array('name','password')); // echo $db - > insert ('demo', array ('name'=>'recently you','password'=>'123'); //echo $db->update('demo',array("name"=>'xxx',"password"=>'123'),array('id'=>1)); echo $db->delete('demo',array('id'=>'2')); db::getLastSql(); echo ""; ?>
Больше читателей, интересующихся контентом, связанным с PHP, могут ознакомиться с темами этого сайта: Введение в объектно-ориентированное программирование Php, Введение в навыки работы с массивами PHP, Введение в базовую грамматику PHP, Краткое описание работы с PHP и использования операторов, Краткое описание использования строк Php, Введение в работу с базой данных php+mysql и общие операции с базами данных php. Краткое изложение навыков письма ___________
Я надеюсь, что эта статья будет полезна для разработки PHP – программ для всех.