PHP单例模式学习笔记
发布:smiling 来源: PHP粉丝网 添加日期:2014-03-15 12:55:24 浏览: 评论:0
为了达到这种目的,必须保证整个项目有且只有一个实例存在并提供一个访问点供全局访问.这就需要通过调用此类的一个共用静态方法来访问这个实例,也就是说此类不能在类外面去实例化,只能在类内部实例,而且是只能通过共用的静态方法调用实例;
最近在看php高级程序设计、模式、框架与测试一书,颇有感悟,与大家分享:
在做项目时,通常我们希望某些类实例一次就够了,比如共用配置类,模板操作类,数据库连接等等,这些类因为在整个项目开发中是通用的,如果实例多次实例就会占用资源.
为了达到这种目的,必须保证整个项目有且只有一个实例存在并提供一个访问点供全局访问.这就需要通过调用此类的一个共用静态方法来访问这个实例,也就是说此类不能在类外面去实例化,只能在类内部实例,而且是只能通过共用的静态方法调用实例;
那么怎么保证此类不能在外面实例化呢?需要此单例类必须拥有一个构造函数__construct,且设置为private(因为已经有__construct,不考虑默认的构造方法:直接用类名的方法的情况),这样就保证了不会在外面直接实例化!同时还需要声明一个静态方法变量来保存此类的实例,一个共用的静态方法来访问此实例,(因为要共用,所以声明为静态的,存放内存中的共用代码区部分).还需要创建一个空的私有的__clone()方法,以防止被克隆.
一个很典型的单例类如下:
实例代码如下:
- class Simple
- {
- /**
- * 单例类实例
- *
- * @static
- * @var object Simple
- */
- public static $_instance;
- //其他成员变量
- /**
- * 构造方法
- *
- * @return void
- */
- private function __construct()
- {
- //写构造方法
- }
- /**
- * 单例模式调用方法
- *
- * @static
- * @return object Template
- */
- public static function getInstance()
- {
- if (!self::$_instance instanceof self)
- self::$_instance = new self();
- return self::$_instance;
- }
- /**
- * 声明一个空的私有克隆方法
- *
- */
- private function __clone()
- {
- }
- //其他方法
- }
- //调用方式
- $Simple = Simple::getInstance();
- ?>
上面用到了 instanceof关键字,为比较操作符,返回布尔能够判断某个对象实例是否为制定的类型,或者是否从某个类继承,或者是否实现了某个特定接口
Tags: __construct private
相关文章
- ·PHP 是什么?(2013-11-12)
- ·Php.ini文件位置在哪里 Php.ini文件找不到(2013-11-12)
- ·点击浏览器的后退按钮后,所有字段的信息都被清空了?(2013-11-12)
- ·PHP 数据类型(2013-11-12)
- ·php 获取当前脚本的url(2013-11-12)
- ·php技术生成静态页面的实现(2013-11-13)
- ·缺陷月项目启动 披露PHP脚本语言漏洞(2013-11-13)
- ·在PHP中全面阻止SQL注入式攻击(2013-11-13)
- ·php生成随机密码的几种方法(2013-11-13)
- ·PHP中使用FCKeditor2.3.2配置(2013-11-13)
- ·如何使用PHP开发高效的WEB系统(2013-11-13)
- ·php过滤危险html代码(2013-11-13)
- ·php:树形结构的算法(2013-11-13)
- ·php4和php5区别(2013-11-13)
- ·php数据库连接(2013-11-13)
- ·如何正确理解PHP的错误信息(2013-11-13)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)