Эта статья иллюстрирует применение одноэлементного режима 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 – программ для всех.