php单例模式的研究
几个关键点:
1,对象P应该可以被系统中的任何对象使用
2,对象P不应该被存储在会被覆写的全局变量总
3,系统中不应该超过一个P对象,也就是说,Y对象可以设置P对象的一个属性,而Z对象不需要通过其他对象(假如Y和Z都可以访问P对象)就可以直接获得该属性的值
实现:
下面创建了一个无法从其自身外部来创建实例的类,听起来有些难,其实只要简单的定义一个私有的构造方法即可:
<?php
class P{
private $props=array();
private function __construct(){} public function setProperty($key,$val){
$this->props[$key] = $val;
}
public function getProperty($key){
return $this->props[$key];
}
}
上面的类,由于构造方法被设置为私有,客户端代码无法实例化对象。因此setProperty和getProperty方法目前也是多余的。
不过我们可以使用静态方法和静态熟悉来实例化对象:
<?php
class P{
private $props=array();
private static $instance; public static function getInstance(){
if(empty(self::$instance)){
self::$instance = new P();
}
return self::$instance;
} private function __construct(){} public function setProperty($key,$val){
$this->props[$key] = $val;
}
public function getProperty($key){
return $this->props[$key];
}
} $pref = P::getInstance();
$pref->setProperty("name","mattttttt");
var_dump($pref);
unset($pref);//移除引用
$pref2 = P::getInstance();
var_dump($pref2);
$pref2->setProperty("name","masssssssssssss");
var_dump($pref2);
print $pref2->getProperty("name");//该属性值并没有丢失
//输出 matttttttt
php单例模式的研究的更多相关文章
- c++ 单例模式研究
一篇博文:C++ 单例模式的几种实现研究 中 看到的几段代码 懒汉模式 class Singleton { public: static Singleton* GetInstance() { if ( ...
- 研究php单例模式实现数据库类
实现单例模式:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例. 单例模式的逻辑:类里面声明一个静态的方法和变量,静态变量用 ...
- Java项目(5)——单例模式的应用与研究
单例模式是非常别致的一个模式,非常少有人拿它跟其它模式相比,由于,单例模式非常easy,非常特别,作用就是保证一个类有唯一一个实例,并让一个全局变量使得它能被訪问.而保证这个类仅仅被实例化一次的办法就 ...
- C++ 单例模式的几种实现研究
都是从网上学得,整理下自己的理解. 单例模式有两种实现模式: 1)懒汉模式: 就是说当你第一次使用时才创建一个唯一的实例对象,从而实现延迟加载的效果. 2)饿汉模式: 就是说不管你将来用不用,程序启动 ...
- Python单例模式研究
方法一 import threading class Singleton(object): __instance = None __lock = threading.Lock() # used t ...
- 10月27日PHP加载类、设计模式(单例模式和工厂模式)、面向对象的六大原则
加载类可以使用include.require.require_once三种中的任意一种,每个关键字都有两种方法,但是这种方法的缺点是需要加载多少个php文件,就要写多少个加载类的方法.一般也就需要加载 ...
- 解决 PhpStorm 对 用单例模式实例化PHP类时,代码自动提示功能失效 的问题
大部分PHP框架中,为了防止一个类被重复实例化,往往采用“单例模式”实例化类.我们的项目框架是这样做的: 先写好一个基类 /framework/Base.class.php,内容如下: <?ph ...
- Java中的GOF23(23中设计模式)--------- 单例模式(Singleton)
Java中的GOF23(23中设计模式)--------- 单例模式(Singleton) 在Java这这门语言里面,它的优点在于它本身的可移植性上面,而要做到可移植的话,本身就需要一个中介作为翻译工 ...
- Java 设计模式泛谈&装饰者模式和单例模式
设计模式(Design Pattern) 1.是一套被反复使用.多人知晓的,经过分类编目 的 代码设计经验总结.使用设计模式是为了可重用代码,让代码更容易维护以及扩展. 2.简单的讲:所谓模式就是得到 ...
随机推荐
- 【学习】一本案例驱动的jQuery Mobile入门书
清华大学出版社推出的<构建跨平台APP:jQuery Mobile移动应用实战> 提供的全是jQuery Mobile的案例: 手机入侵 题库应用 音乐专辑 通讯录 新闻列表 销售排名 九 ...
- PHP基础OOP(一)
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- POJ 1265 Area
有一种定理,叫毕克定理.... Area Time Limit: 1000MS Memory Limit: 10000K Total Sub ...
- Ubuntu/Windows下利用“HIDAPI”库函数实现与Hid类USB设备通信
一.背景: 最近在做的一个项目需要使用USB传递数据,对USB理解不是很深,USB的系统驱动编写则更是天方 夜谭,因此将设备配置成HID类设备成为了首选.其最大的好处在于,LINUX/Windows系 ...
- JSON格式转换(javascript)
使用ajax从后台抓取数据后,如果有多个值,可以使用json传值. ajax例子如下,在返回的类型里面,可以是文本型(text),JSON格式(json),超文本类型(html),XML文件类型(xm ...
- Go - template 常用方法详解 及 注意事项
Go template包下面有两个函数可以创建模板实例 func New(name string) *Template func ParseFiles(filenames ...string) (*T ...
- 客户端安全-csrf
1.需求 理解并掌握CSRF攻击和防御 2.csrf的产生 盗个图说明(http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html) B伪 ...
- CCActionManager
当CCnode执行runAction的时候,runAction会调用动作管理类的addAction方法将它自己执行的动作传递给动作管理类,动作管理类再将动作添加到自己的动作序列中. 动过管理类通过定时 ...
- Oracle 多表查询优化
ORACLE有个高速缓冲的概念,这个高速缓冲就是存放执行过的SQL语句,那oracle在执行sql语句的时候要做很多工作,例如解析sql语句,估算索引利用率,绑定变量,读取数据块等等这些操作.假设高速 ...
- javascript中数组concat()join()split()
concat() 方法用于连接两个或多个数组. 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. 所以 <script type="text/javascript" ...