PHP 中单一实例类的实现

有时候我们希望一个类在使用的时候只存在一个实例,但是我们又不敢保证自己不会在无意中new 了多次,怎么办呢?这里给出了一个保证单一实例类的一种做法:

<?php
// 单一实例的封装方法 
 /**
 * @author lijunjie <lijunjie1982@yahoo.com.cn> 
 * @date 2008-12-7 
 * @version 1.0 
 */ 
class OnlyOneInstance 

    private static 
$instance false

    private 
$instanceId 0

    public static function 
getInstance
() { 
        if(
OnlyOneInstance::$instance === false
) { 
            
OnlyOneInstance::$instance = new OnlyOneInstance
(); 
        } 
        return 
OnlyOneInstance::$instance

    } 
    
/// 私有的构造函数保证了该类无法在外部构造
    
private function __construct
(){
        
$this->_init
();
    }
    private function 
_init
() { 
        
$this->instanceId mt_rand
(); 
    } 
    public function 
say
() { 
        echo 
"my id is $this->instanceId\n"

    } 

OnlyOneInstance::getInstance()->say(); 
OnlyOneInstance::getInstance()->say
(); 

// 两次输出是一样的,说明两次的使用的是同一个实例 
exit;
?> 

 

加入对话

1条评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据