美文网首页
PHP设计模式 - 单例模式

PHP设计模式 - 单例模式

作者: henryspace | 来源:发表于2018-03-01 19:40 被阅读0次

单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。
所有的单例模式至少拥有以下三种公共元素:
a, 它们必须拥有一个构造函数,并且必须被标记为private
b, 它们拥有一个保存类的实例的静态成员变量
c, 它们拥有一个访问这个实例的公共的静态方法
单例类不能再其它类中直接实例化,只能被其自身实例化。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。

单例模式 - 数据库单例实现

<?php 

class db {

    protected $conn;
    protected $sql;
    protected static $instance;
    protected $db_config = [
        'host'      => 'localhost',
        'user'      => 'root',
        'password'  => '123456',
        'database'  => 'test_db',
    ];

    private function __construct() 
    {
        $db = $this->db_config;
        $this->conn = mysqli_connect($db['host'], $db['user'], $db['password'], $db['database']);
        if(!$this->conn){
            die('数据库连接失败!');
        }
    }

    public static function getInstance()
    {
        if(!(self::$instance instanceof self)) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function select($table, $condition=[], $field=[], $group='', $order='', $sort='asc', $limit='')
    {
        $where = '';
        if(!empty($condition)) {
            foreach($condition as $key => $value) {
                $where .= "{$key} = {$value} and";
            }
            $where = 'where '.rtrim($where, 'and');
        }
        $field_str = '';
        if(!empty($field)) {
            foreach($field as $value) {
                $field_str .= "{$value},";
            }
            $field_str = rtrim($field_str, ',');
        }else{
            $field_str = '*';
        }
        if($group) {
            $group = "group by {$group}";
        }
        if($order) {
            $order = "order by {$order}";
            if(!$sort || 'asc' != strtolower($sort)){
                $sort = 'desc';
            }
            $order .= " {$sort}";
        }
        $this->sql = "select {$field_str} from {$table} {$where} {$group} {$order} {$limit}";

        $result_row = [];
        $result_row = $this->query($this->sql);
        return $result_row;
    }

    public function query($sql='')
    {
        if(empty($sql)){
            die('未定义查询sql');
        }
        $this->sql = $sql;
        $result = mysqli_query($this->conn, $this->sql);
        $result_row = [];
        $i = 0;
        while($result && $row = mysqli_fetch_assoc($result)) {
            foreach($row as $key => $value) {
                $result_row[$i][$key] = $value;
            }
            $i++;
        }
        return $result_row;
    }

    public function insert()
    {
        return;
    }

    public function update()
    {
        return;
    }

    public function delete()
    {
        return;
    }

    public function getLastSql()
    {
        return $this->sql;
    }

    public function __call($name, $arguments)
    {
        $methods = [];
        $reflects = new reflectionclass(__CLASS__);
        foreach($reflects->getmethods() as $methodobj){
            $methods[$methodobj->name] = 1;
        }
        if(!isset($methods[$name])) {
            die('方法未定义!');
        }
        return;
    }

    public function __clone()
    {
        die('禁止克隆实例!');
    }

    public function __destruct(){}
}

使用示例 db::getInstance()->getLastSql();

相关文章

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • ThinkPHP设计模式与Trait技术

    阅读原文 设计模式 单例模式 工厂模式 对象注册树 示例 运行 Trait技术 自 PHP 5.4.0 起,PHP...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • 测试文章

    php 设计模式 1.单例模式 单例模式顾名思义,就是只有一个实例。作为对象的创建模式, 单例模式确保某一个类只有...

  • pattern设计模式

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 设计模式 - 单例模式

    设计模式 - 单例模式 什么是单例模式 单例模式属于创建型模式,是设计模式中比较简单的模式。在单例模式中,单一的类...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

网友评论

      本文标题:PHP设计模式 - 单例模式

      本文链接:https://www.haomeiwen.com/subject/mrtnxftx.html