Maison >développement back-end >tutoriel php >Le mode PHP singleton conçoit la base de données et se connecte à la classe Model

Le mode PHP singleton conçoit la base de données et se connecte à la classe Model

小云云
小云云original
2018-03-29 10:53:041693parcourir

En utilisant l'idée introduite dans "[Java] Singleton Mode" (cliquez pour ouvrir le lien), cette classe de liens de base de données peut être transformée en singleton. Une instance de requête de base de données ne sera pas créée simplement parce que plusieurs utilisateurs la visitent. le site Web. Glisser-déposer Le ralentissement de la vitesse de l'ensemble du site Web exerce une plus grande pression sur la base de données du site Web, ce qui entraîne une baisse significative de la vitesse du site Web.

Les points les plus critiques pour l'implémentation de singleton sont ces 3 points :

1 Constructeur privé Il n'est pas nécessaire d'avoir un constructeur privé sans paramètre comme le fait Java. not Plusieurs constructeurs sont autorisés - même si les paramètres du constructeur sont différents.

2. Fonctions des classes de clone privé

3. Exposez une "fonction de création d'instance" publique pour l'appel. Cette "fonction de création d'instance" détermine si l'instance correspondante existe déjà et renvoie cette instance. Créez s'il n'y en a pas.

Cela garantit qu'il n'y a qu'une seule classe de connexion à la base de données.

Utilisez un exemple directement pour illustrer. Il y a un utilisateur de table dans le test de base de données


Utilisez d'abord le mode singleton pour concevoir le modèle de connexion à la base de données. classe, et ajoutez ceci Le contenu du tableau est interrogé sur la page Web :


  1. <?php  
    class db{  
        private $link;  
        //db类单例开始  
        //保存类实例的私有静态成员变量  
        private static $_instance;  
        //定义一个私有的构造函数,确保单例类不能通过new关键字实例化,只能被其自身实例化  
        private function __construct($host,$username,$password,$database){  
            $this->link=mysql_connect($host,$username,$password);  
            if(!$this->link){  
                die("连接失败!");  
            }  
            mysql_query("set names utf8;");  
            mysql_select_db($database);  
        }  
        //定义私有的__clone()方法,确保单例类不能被复制或克隆  
        private function __clone(){}  
        public static function getInstance($host, $username, $password,$database) {  
            //检测类是否被实例化  
            if(!(self::$_instance instanceof self)){  
                self::$_instance=new db($host,$username,$password,$database);  
            }  
            return self::$_instance;  
        }  
        //执行SQL语句  
        public function query($query){  
            return mysql_query($query, $this->link);  
        }  
        //关闭数据库连接  
        public function close(){  
            return mysql_close($this->link);  
        }  
    }  
    //调用单例类测试部分  
    header("Content-type: text/html; charset=utf-8"); //设置网页编码  
    $dbconnector=db::getInstance("localhost","root","root","test");//创建数据库连接类  
    $result=$dbconnector->query("select * from user");//查询数据库  
    for($i=0;$row=mysql_fetch_array($result);$i++){//打印查询结果  
        echo $row[&#39;id&#39;].",".$row[&#39;username&#39;].",".$row[&#39;password&#39;]."<br/>";  
    }    
    ?>


Cela garantit qu'il n'y a qu'une seule instance $dbconnector correspondant à la classe db, et il y a une autre phrase :

  1. $dbconnector1
    =db::getInstance(
    "localhost"
    ,
    "root"
    ,
    "root"
    ,
    "test"
    );
    //创建数据库连接类


Cela arrive toujours Retour à l'instance créée d'origine $dbconnector. Il faut dire que l'exploitation de $dbconnector et $dbconnector1 ont le même effet. C'est la même chose. Plus aucune ressource ne sera allouée sur la mémoire du serveur. pour stocker $dbconnector et $dbconnector1 car db est un exemple unique, atteignant ainsi l'objectif de réduire la pression sur la base de données.

Recommandations associées :

Expérience dans la conception d'un tutoriel Database_PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn