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

    首先我们要明确单例模式这个概念,那么什么是单例模式呢?
    单例模式顾名思义,就是只有一个实例。
    作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,
    这个类我们称之为

    单例模式的要点有三个:
       它们必须拥有一个构造函数,并且必须被标记为private
       它们拥有一个保存类的实例的静态成员变量

       它们拥有一个访问这个实例的公共的静态方法单例类。

    和普通类不同的是,单例类不能在其他类中直接实例化。单例类只能被其自身实例化。要获得这样的一种结果, __construct()方法必须被标记为private。如果试图用private构造函数构造一个类,就会得到一个可访问性级别的错误。
    要让单例类起作用,就必须使其为其他类提供一个实例,用它调用各种方法。单例类不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。结果是单例类不会重复占用内存和系统资源,从而让应用程序的其它部分更好地使用这些资源。作为这一模式的一部分,必须创建一个空的私有__clone()方法,以防止对象被复制或克隆。

    返回实例引用的这个方法通常被命名为getInstance()。这个方法必须是静态的,而且如果它还没有实例化,就必须进行实例化。getInstance() 方法通过使用 instanceof 操作符和self 关键字,可以检测到类是否已经被实例化。

    header("Content-type:text/html;charset=utf-8");
    //单例测试类
    class Test {
        private $unique;
        static private $instance;//静态属性保存该类实例
          
        private function __construct(){//构造方法私有(防止外界调用)
            $this->unique=rand(0,20000);
        }
        static public function getInstance(){//静态方法提供对外接口(获取实例)
            if(!self::$instance instanceof self){
                self::$instance=new self();
            }
            return self::$instance;
        }
        private function __clone(){}//私有克隆方法,防止外界直接克隆该实例
         
    }
    $test=Test::getInstance();
    $test2=Test::getInstance();
         
    print_r($test);
    print_r($test2);
         
    if($test===$test2){
        echo '相等!';
    }else{
        echo '不相等!';
    }

    结果:

  • 相关阅读:
    老生长谈:css实现右侧固定宽度,左侧宽度自适应
    链接rel属性external、nofollow、external nofollow三种写法的区别
    文字无缝向上滚动
    JS中判断鼠标按键的问题
    js 字符串转换数字
    jS字符串大小写转换实现方式
    JS截取字符串
    CentOS中查看物理CPU信息的方法
    如何开启MYSQL远程连接权限
    PHP中数组排序实例学习
  • 原文地址:https://www.cnblogs.com/sheevy/p/4010688.html
Copyright © 2011-2022 走看看