zoukankan      html  css  js  c++  java
  • 单例模式

    <?php
    class DB {
    private $_db;
    //静态是通过类::字段直接访问的,private表示外部不能访问
    static private $_instance;
    //访问这个实例的公共静态方法
    static public function getInstance() {
    //如果对象没有创建,就创建它,如果创建了,就直接返回
    if (!(self::$_instance instanceof self)) {
    self::$_instance = new self();
    }
    return self::$_instance;
    }
    //单一职责问题,私有化克隆
    private function __clone() {}
    //私有化构造方法,
    private function __construct() {
    try {
    $this->_db = new PDO('mysql:host=localhost;dbname=cms','root','yangfan');
    echo '创建了一次数据库链接对象';
    } catch (PDOException $e) {
    exit($e->getMessage());
    }
    }
    public function query($_sql) {
    return $this->_db->query($_sql);
    }
    }
    ?>

    单例类所需的三个公共元素:
    1.必须拥有一个构造方法,并且必须被标记为 private;
    2.拥有一个保存类的实例的静态成员属性(字段);
    3.拥有一个访问这个实例的公共的静态方法。

    虽然全局变量可以实现单例, 让整个内存流程清晰, 让对象保持一个, 但这是有代价的:
    1.全局变量处在特定的区域环境,破坏了整个类的封装;
    2.如果新的应用程序无法保证一开始就定了相同的全局变量, 那么这个类依赖与全局变
    量,就无法从一个应用中提取出来应用到新的应用程序上。(PS:因为没有封装在类里,如
    果全局变量不是在 DB.class.php,而是单独文件,往往就提取不到)。
    3.全局变量不受保护,也就是说,可以任意存放和修改。一旦依赖全局,随着项目的扩
    展,冲突在所难免。因为全局不变量不像类中的成员属性,如果冲突会提示警告报错,而全局变量不会。

    4.全局变量,并没有真正实现单例,如果在程序中不遵循类库提供个规范,而自己创建类,则还是会产生多个对象。

  • 相关阅读:
    Hibernate学习笔记
    Oracle12c 在windonServer2012中安装的步骤
    提升tomcat服务器性能的七条经验
    zyUpload---照片上传并显示效果
    js的隐含参数(arguments,callee,caller)使用方法
    js中callback.call()和callback()的区别
    理解javascript中的回调函数(callback)
    Spring MVC 流程图
    JDBC在springMvc等框架中使用的方式
    为IE8添加EventListener系列方法支持
  • 原文地址:https://www.cnblogs.com/jsmiao/p/4492048.html
Copyright © 2011-2022 走看看