单例模式顾名思义,就是只有一个实例。作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

单例模式的要点有三个:

  1. 一是某个类只能有一个实例;
  2. 二是它必须自行创建这个实例;
  3. 三是它必须自行向整个系统提供这个实例。
为什么要使用PHP单例模式
  1. 1. php的应用主要在于数据库应用, 一个应用中会存在大量的数据库操作, 在使用面向对象的方式开发时, 如果使用单例模式, 则可以避免大量的new 操作消耗的资源,还可以减少数据库连接这样就不容易出现 too many connections情况。
  2. 2. 如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看zend Framework的FrontController部分。
  3. 3. 在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。

例子:

/**
* 设计模式之单例模式
* $_instance必须声明为静态的私有变量
* 构造函数必须声明为私有,防止外部程序new类从而失去单例模式的意义
* getInstance()方法必须设置为公有的,必须调用此方法以返回实例的一个引用
* ::操作符只能访问静态变量和静态函数
* new对象都会消耗内存
* 使用场景:最常用的地方是数据库连接。
* 使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。
*/
class man
{
//保存例实例在此属性中
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("test"); }
} // 这个写法会出错,因为构造方法被声明为private
//$test = new man; // 下面将得到Example类的单例对象
$test = man::get_instance();
$test = man::get_instance();
$test->test(); // 复制对象将导致一个E_USER_ERROR.
//$test_clone = clone $test;

最新文章

  1. 版本管理工具SVN
  2. MySQL的insert语句的区别
  3. CAGradientLayer的一些属性解析
  4. WhaleSong
  5. css3写的实用表单美化
  6. js 事件监听 冒泡事件
  7. 老李推荐:第6章7节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-注入按键事件实例
  8. HTML在网页中插入音频视频简单的滚动效果
  9. python tkinter学习——tkinter部件1
  10. doT.js——前端javascript模板引擎问题备忘录
  11. Android 自定义标题栏
  12. Linux安装Sqlite
  13. VS2017 EF本地数据库链接
  14. P4783 【模板】矩阵求逆
  15. 什么是ip代理
  16. git常用操作命令使用说明
  17. 作业-JSP简单入门
  18. 升级my.cnf注意
  19. 报错:Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
  20. Eclipse_Configure

热门文章

  1. [转载]软件测试之Web测试经典总结
  2. [置顶] 【Git入门之十四】Git GUI
  3. 422. Valid Word Square
  4. linux安装vnc
  5. Tips--8080端口被占用了怎么办
  6. Git push本地代码到新建远程仓库
  7. STRUCTS 2 UPLOAD
  8. 《Java 并发编程实战》读书笔记之二:图文讲述同步的另一个重要功能:内存可见性
  9. JQuery请求WebService返回数据的几种处理方式
  10. android shape的使用详解以及常用效果(渐变色、分割线、边框、半透明阴影效果等)