单例模式
<?php
/**
* 单例模式
*
* @author T.L.Q. emali<hjq_tlq@163.com>
*/
class Single {
private static $_instance = NULL;
// 私有化构造方法,防止被类被实例化(
private function __construct()
{
echo "construct<br />";
}
// 得到该类独一无二的实例
public static function instance()
{
if (!self::$_instance instanceof Single) {
self::$_instance = new Single();
}
return self::$_instance;
}
// 自定义方法
public function test()
{
echo "OK<br />";
}
// 阻止用户复制对象实例
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
}
}
// 该类无法实例化,必须通过instance获得该类的实例
//$single = new Single();
$class = 'Single';
$single = $class::instance();
// 如果使用克隆则会抛出异常
//$singleClone = clone $single;
$single->test();
$single1 = $class::instance();
$single1->test();
$single2 = $class::instance();
$single2->test();
$single3 = $class::instance();
$single3->test();
$single4 = $class::instance();
$single4->test();
$single5 = $class::instance();
$single5->test();
$single6 = $class::instance();
$single6->test();
$single7 = $class::instance();
$single7->test();
// 结果
/*
construct
OK
OK
OK
OK
OK
OK
OK
OK
*/