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.简单的讲:所谓模式就是得到 ...
随机推荐
- SQL 语句-partition by
/****** ******/ 初始化数据 create table employee (empid int ,deptid int ,salary decimal(10,2)) insert int ...
- MySQL事物控制
有时候我们需要保证事物的各个步骤都执行成功的前提下才能让每一步骤的事物执行,此时就需要事物控制. 事物控制用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败 ...
- 2015baidu复赛2 连接的管道(mst && 优先队列prim)
连接的管道 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- PHP Socket实现websocket(三)Stream函数
除了socket函数也可以使用stream函数来实现服务器与客户端. 参考PHP 的Stream实现服务器客户端模型: http://php.net/manual/en/book.stream.php ...
- 关于sql用<>不等于查询数据不对问题
平常查询数据 ' 当想要查询 不等于1 的数据的时候,一般会这样查询 ' 此处查询结果没查到所有想要的结果,如果night_flag 列数据为 null时,此行数据是查询不到的. 解决方法一: ' 解 ...
- Nginx的作用
负载均衡 现在几乎看不到单机奋斗的应用了吧.反向代理服务器可以根据负载均衡算法进行均匀或者自定义的转发.常见的负载均衡算法有:轮转算法(Round Robin).最少连接算法(Least Connec ...
- 关于在android 4.2.2 上运行runlmbench
在剑锋的基础上加一些自己笔记,让自己更懂一些这个流程. 参考:http://www.cnblogs.com/zengjfgit/p/5731655.html runlmbench 是一款在linux ...
- Python super继承详解
MRO(Method resolution order)是python用来解析方法调用顺序的,mro中记录了一个类的所有基类的类类型序列,super不是简单地调用基类的方法,而是按照MRO中的顺序来调 ...
- Java微博搜索关键字采集
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
- Different Ways to Add Parentheses
Given a string of numbers and operators, return all possible results from computing all the differen ...