设计模式-单例模式(php)

<?php

//单例模式的实现
class MysqlInstance
{
    private static $instance;//不可被类外部访问
    private $client;
    private $param = array();

    private function __construct()
    {


    }

    //实例化对象
    public static function getInstance()
    {

        if (empty(self::$instance)) {
            self::$instance = new MysqlInstance();
        }
        return self::$instance;
    }

    //设置连接参数
    public function setClientParam($key, $value)
    {
        $this->param[$key] = $value;
    }

    //设置连接对象
    public function setClient()
    {
        try {
            $this->client = new PDO("mysql:host=" . $this->param["server"] . ";dbname=" . $this->param["dbname"], $this->param["username"], $this->param["pwd"]);
            $this->client->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        } catch (\PDOException $exception) {
            echo $exception->getMessage();
        }
    }

    //查询select
    public function getQuery($sql)
    {
        $re=$this->client->prepare($sql);
        $re->execute();
        return $re->fetchAll();
    }

    //事物查询
    public function tranQuery($sql){
        $t=$this->client->prepare($sql);
       return $t->execute();
    }

}


//初始化
$obj = MysqlInstance::getInstance();
$obj->setClientParam("server", "127.0.0.1");
$obj->setClientParam("dbname", "test");
$obj->setClientParam("username", "root");
$obj->setClientParam("pwd", "root123");
$obj->setClient();
$re = $obj->getQuery("select * from user");
unset($obj);//删除对象后重新实例化之后对象参数依然存在
$obj2 = MysqlInstance::getInstance();
//$t=$obj2->tranQuery("insert into user (username,state) VALUES ('index',1)");
$re = $obj2->getQuery("select * from user");
var_dump($re);


在一个对象中,类的属性变量只需要设置一次,不需要进行重复的设置,如上述实现的mysql的连接的类,我们只需要进行一次连接参数设置,当引用之后的类被注销之后,再次实例化设置的参数依然存在,单例模式是对全局变量的一种改进。欢迎扫码关注微信公众号奋斗的猿类,有不足之处欢迎指正。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值