有时候我们希望一个类在使用的时候只存在一个实例,但是我们又不敢保证自己不会在无意中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;
?>
http://cn.php.net/manual/en/language.oop5.patterns.php