无意中看到一个所谓的"玩魔兽"学习PHP的设计模式的帖子,其中第一个就是所谓的"单价模式"(其实就是我们说的:Singleton class中文应该叫做'单例类').
名词解释:
Singleton_Class ['name' => '单例类'];
就是在整个程序运行生命周期内只能实例化一次的类.
PHP中的实现方法:(测试通过)
<?php
/**
* 这是一个单例类,用来保存程序运行期间的数据.<br />
* 这里体现了PHP的几个特殊的地方:
* 1.构造函数可以用private,protected等限制访问符;
* 2.在类的内部实例化自身,应该使用:new self(),而不是类的外部名称;
*
* @author Fonny
*
*/
class SingletonModel
{
private $_count_sm_instance = 0;
/**
* SingletonModel的构造函数.<br />
* 可以加参数,但是同时也要在getInstance方法中添加同样的参数才能实现效果.
*
* @return SingletonModel
*/
private function __construct()
{
$this->_count_sm_instance++;
$tl = new StudyTools();
$tl->echoStr("SingletonModel instance count: " . $this->_count_sm_instance,false);
}
/**
* 仅子类可访问的本单例类的静态实例
* @var SingletonModel
*/
static protected $_instance = null;
/**
* 获得SingletonModel类的全局唯一实例的唯一方法
*
* @return SingletonModel
*/
static public function getInstance()
{
if(self::$_instance === null)
{
self::$_instance = new self();
}
return self::$_instance;
}
}
?>
<?php
require_once 'includes/singleton.class.php';
$sm = SingletonModel::getInstance();
$sm2 = SingletonModel::getInstance();
//只会得到同一个内存资源的引用
?>