设计模式之单例模式--instance

本文详细介绍了PHP中单例模式的设计原理、实现方式及常见应用场景,特别强调了单例模式在数据库连接管理上的优势。通过实例代码演示了如何确保实例的唯一性,并解释了为何构造函数和析构函数需私有化,以及如何通过静态方法获取实例。文章还提到了使用单例模式避免对象复制带来的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php
header('Content-Type:text/html;charest=utf-8');
/**
* 设计模式之单例模式
* $_instance必须声明为静态的私有变量
* 构造函数和析构函数必须声明为私有,防止外部程序new
* 类从而失去单例模式的意义
* getInstance()方法必须设置为公有的,必须调用此方法
* 以返回实例的一个引用
* ::操作符只能访问静态变量和静态函数
* new对象都会消耗内存
* 使用场景:最常用的地方是数据库连接。 
* 使用单例模式生成一个对象后,
* 该对象可以被其它众多对象所使用。 
*/
class Danli {
 
    //保存类实例的静态成员变量
    private static $_instance;
    
    //private标记的构造方法
    private function __construct(){
        echo 'This is a Constructed method;';
    }
     
    //创建__clone方法防止对象被复制克隆
    public function __clone(){
        trigger_error('Clone is not allow!',E_USER_ERROR);
    }
     
    //单例方法,用于访问实例的公共的静态方法
    public static function getInstance(){
        if(!(self::$_instance instanceof self)){
            self::$_instance = new self;
        }
        return self::$_instance;
    }
     
    public function test(){
        echo '调用方法成功';
    }
 
}
 
//用new实例化private标记构造函数的类会报错
//$danli = new Danli();
//正确方法,用双冒号::操作符访问静态方法获取实例
$danli = Danli::getInstance();
$danli->test();    //This is a Constructed method;调用方法成功
 
//复制(克隆)对象将导致一个 E_USER_ERROR
$danli_clone = clone $danli;        //Fatal error: Clone is not allow! in D:\wamp\www\study\abstract_class\instance.php on line 28

 

转载于:https://www.cnblogs.com/yhdsir/p/4649001.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值