Blogger Information
Blog 49
fans 0
comment 1
visits 46912
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
与单例设计模式的初次邂逅
失去过去的博客
Original
741 people have browsed it
  1. 单例模式

    1. 单例模式是所有语言中最合适php的模式 ,也是学习过程中最常用的模式 例如 数据库连接类

    2. 设计模式的目的是用来防止 重复初始化或者new ,占用内存空间,达到优化目的的一种设计模式 


    2.三个要素

           1.保存一个唯一的一个静态成员属性 

             2.__construct 和 __clone 两个魔术方法需要声明私有的  private 防止外部克隆和重复创建

                3. 需要保存一个返回唯一实例的静态方法 提供外部调用返回 唯一实例

模式结构

<?php

class Demo
{

    //设置唯一实例并设置为空,
    private static $obj = null;
    //私有化构造方法
    private function __construct()
    {
    }
    //私有化克隆方法
    private function  __clone()
    {
    }
    //返回唯一实例的静态方法
    public static function getInstence()
    {
        if (self::$obj == null){
            self::$obj = new self;

        }
        return self::$obj;
    }

}
$exp1 = new Demo();
$obj1 = $exp1::getInstence();
$exp2 = new Demo();
$obj2 = $exp2::getInstence();
var_dump($exp1==$exp2);
echo "<hr>";
var_dump($obj1==$obj2);
?>

运行实例 »

点击 "运行实例" 按钮查看在线实例




数据库连接实例

<?php

class Db
{
//数据库连接类


    //设置唯一实例并设置为空,保存唯一的一个返回全局实例
    private static $obj = null;
    //数据库连接句柄
    private  $con;
        //类常量
    const HOSTNAME = '127.0.0.1';
    const USERNAME = 'root';
    const PASSWORD = 'root';
    const DBNAME = 'video';
    //私有化构造方法
    private function __construct()
    {
        //初始化连接
            $this->con = mysqli_connect(self::HOSTNAME,self::USERNAME,self::PASSWORD,self::DBNAME);
    }
    //私有化克隆方法
    private function  __clone()
    {
    }
    //返回唯一实例的静态方法
    public static function getInstence()
    {
        if (self::$obj == null){
            self::$obj = new self;

        }
        return self::$obj;
    }
    public function getInfo()
    {
        $sql = "SELECT * FROM member WHERE id >2";
        $res = mysqli_query($this->con,$sql);

        $userinfo = [];
            foreach (mysqli_fetch_all($res) as $k =>$v){
                $userinfo[$k] = $v;
            }
        return $userinfo;

    }

}
echo "<pre>";
$obj =  Db::getInstence();
$obj2 =  Db::getInstence();
var_dump($obj==$obj2);
echo "<hr>";
print_r($obj->getInfo());

运行实例 »

点击 "运行实例" 按钮查看在线实例


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post