单例模式顾名思义,就是只有一个实例。作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
单例模式的要点有三个:
二是它必须自行创建这个实例;
三是它必须自行向整个系统提供这个实例。
为什么要使用PHP单例模式
2. 如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看zend Framework的FrontController部分。
3. 在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。
Class db{
//保存例实例在此属性中
private static $_instance;
//构造函数声明为private,防止直接创建对象
private function __construct(){
echo "我诶实例化了";
}
//单例方法
public static function get_instance(){
// var_dump(isset(self::$_instance));
if(!isset(self::$_instance)){
self::$_instance = new self();
}
return self::$_instance;
}
//阻止用户复制对象实例
private function __clone(){
trigger_error("clone is not allow", E_USER_ERROR);
}
function test(){
echo "tst";
}
}
$test = db::get_instance();
$test->test();
// 复制对象将导致一个E_USER_ERROR.
//$test_clone = clone $tes