zoukankan      html  css  js  c++  java
  • 辛星和您一起解析PHP中的单例模式

         事实上单例模式还是用的挺多的,要说到最经典的样例。可能就是操纵数据库的类了,它假设是单例的话,能够避免大量的new操作消耗资源,而假设系统中须要一个类来管理全局的信息,则把它用成单例也是非常不错的。由于它是全局有效的,我们无需多次实例化。

        以下是正确的调用方式演示样例:

    <?php
    class Xin{
    	//保存该类的实例
    	private static $_instance;
    
    	//不让外部调用该构造函数
    	private function __construct(){
    		echo "辛星加油";
    	}
    
        //用于获取实例,必须是静态的,否则外部无法调用
    	public static function get_instance(){
    		//假设该单例不存在。则创建它
    		if(!(self::$_instance instanceof self)){
    			self::$_instance = new self;
    		}
    		//返回它既可
    		return self::$_instance;
    	}
    	//不同意对象被克隆
    	public function __clone(){
    		trigger_error('Clone Denyed!',E_USER_ERROR);
    	}
    	//功能函数
    	public  function xin(){
    		echo "调用Xin类的xin函数。辛星你好";
    	}
    }
    
    
    //正确的调用方式
    $xin = Xin::get_instance();
    $xin->xin();

    它的输出,我想读者也能猜到了:

    辛星加油调用Xin类的xin函数。辛星你好

    假设我们要克隆对象的话,比方以下代码:

    <?

    php class Xin{ //保存该类的实例 private static $_instance; //不让外部调用该构造函数 private function __construct(){ echo "辛星加油"; } //用于获取实例,必须是静态的,否则外部无法调用 public static function get_instance(){ //假设该单例不存在,则创建它 if(!(self::$_instance instanceof self)){ self::$_instance = new self; } //返回它既可 return self::$_instance; } //不同意对象被克隆 public function __clone(){ trigger_error('Clone Denyed!',E_USER_ERROR); } //功能函数 public function xin(){ echo "调用Xin类的xin函数。辛星你好"; } } //克隆的时候会报错的 $xin = Xin::get_instance(); $qian = clone $xin;


    那么会报错信息例如以下:

    辛星加油
    ( ! ) Fatal error: Clone Denyed! in D:MyAppwampwwwerr.php on line 22
    Call Stack

    好啦,,鉴于单例模式本身就简单,读者有什么不清楚的能够在以下留言。我会认真解答的。



  • 相关阅读:
    objcopy使用
    linux中的strip命令简介
    strace命令详解
    bash执行顺序:alias --> function --> builtin --> program
    Ubuntu下安装docker
    uvm中类继承和phase
    error和exception有什么区别?
    sleep() 和 wait() 有什么区别?
    CSS3实现环形进度条?
    请写出你最常见到的5个runtime exception?
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6781145.html
Copyright © 2011-2022 走看看