php面向对象值单例模式_php实例

单例模式(职责模式):
简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务;
单例类:
1、构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化;
2、拥有一个保存类的实例的静态成员变量
3、拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)
另外,需要创建__clone()方法防止对象被复制(克隆)
为什么要使用PHP单例模式?
1、php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源。
2、如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看ZF的FrontController部分。
3、在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。
代码实现:
<111?111php111
/1**
* 设计模式之单例模式
* $_instance必须声明为静态的私有变量
* 构造函数和析构函数必须声明为私有,防止外部程序new
* 类从而失去单例模式的意义
* getInstance()方法必须设置为公有的,必须调用此方法
* 以返回实例的一个引用
* ::操作符只能访问静态变量和静态函数
* new对象都会消耗内存
* 使用场景:最常用的地方是数据库连接。
* 使用单例模式生成一个对象后,
* 该对象可以被其它众多对象所使用。
*/
class Danli {

//保存类实例的静态成员变量
private static $_instance;

//private标记的构造方法
private function __construct(){
echo 'This is a Constructed method;';
}

//创建__clone方法防止对象被复制克隆
public function __clone(){
trigger_error('Clone is not allow!',E_USER_ERROR);
}

//单例方法,用于访问实例的公共的静态方法
public static function getInstance(){
if(!(self::$_instance instanceof self)){
self::$_instance = new self;
}
return self::$_instance;
}

public function test(){
echo '调用方法成功';
}

}

//用new实例化private标记构造函数的类会报错
//$danli = new Danli();

//正确方法,用双冒号::操作符访问静态方法获取实例
$danli = Danli::getInstance();
$danli->test();

//复制(克隆)对象将导致一个E_USER_ERROR
$danli_clone = clone $danli;

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索面向对象单例模式、面向对象单例模式例子、面向对象工厂模式实例、ios 单例创建实例对象、java单例模式实例,以便于您获取更多的相关知识。

时间: 2024-09-15 16:49:21

php面向对象值单例模式_php实例的相关文章

浅析php单例模式_php实例

本系列文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式之单例模式. 一.设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用.容易被他人理解的.可靠的代码设计经验的总结. 设计模式不是Java的专利,我们用面向对象的方法在PHP里也能很好的使用23种设计模式. 那么我们常说的架构.框架和设计模式有什么关系呢? 架构是一套体系结构,是项目的整体解决方案:框架是可供复用的半成品软件,是具体程序代码.架构一般会涉及到采用什么样的框架来加速和优化某部分问题的解决,而好的

PHP获取二维数组中某一列的值集合_php实例

PHP还是比较常用的,于是我研究了一下PHP二维数组.在处理php数组的时候,有一种需求特别的频繁,如下二维数组: $arr = array( 1=>array( 'id' => 5, 'name' => '张三' ), 2=>array( 'id' => 6, 'name' => '李四' ) ); 目的就是要取到key为name的集合,得到这个结果: $arr2 = array( 0=>'张三', 1=>'李四' ); 这里有几种方法: 1:最简单的,f

浅谈mysql_query()函数的返回值问题_php实例

问题描述: 我在操作mysql,插入数据时,关闭资源,PHP提示了一个warning.内容大致为,需要给mysql_free_result()一个资源类型. 然后,我将返回的结果var_dump($res),发现是bool值 分析: 看手册时,一眼看上去,觉得mysql_query()函数返回的本来就是资源类型,可是为什么现在又是bool值了呢?好吧,耐心看完手册,才发现,原理是这样的,如下图片: 总结:由上可以知道,mysql_query()执行sql语句时,并不是什么时候都要执行释放结果集,

php定义一个参数带有默认值的函数实例分析

 这篇文章主要介绍了php定义一个参数带有默认值的函数,实例分析了php参数带有默认值的函数使用技巧,需要的朋友可以参考下     本文实例分析了php定义一个参数带有默认值的函数用法.分享给大家供大家参考.具体分析如下: php的函数参数可以指定默认值,指定默认值后,调用时如果不给该参数赋值,则该参数就使用默认值 ? 1 2 3 4 5 6 7 8 9 10 11 <?php function capitalize( $str, $each=TRUE ) { $str = strtolower

javascript原始值和对象引用实例分析

javascript原始值和对象引用实例分析         这篇文章主要介绍了javascript原始值和对象引用的方法,实例分析了javascript原始值和对象引用的功能.定义与相关技巧,需要的朋友可以参考下 本文实例讲述了javascript原始值和对象引用的方法.分享给大家供大家参考.具体分析如下: 一句话来说:原始值是不可变的,而对象引用是可变的. js中的原始值(undefined.null.布尔值.数字和字符串)与对象(包括数组和函数)有着本质的区别.原始值是不可更改的,任何方法

jQuery设置与获取HTML,文本和值的简单实例

 本篇文章主要是对jQuery设置与获取HTML,文本和值的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助  代码如下: <script type="text/javascript">  //<![CDATA[   $(function(){       //获取<p>元素的HTML代码       $("input:eq(0)").click(function(){             alert(  $(&qu

JS获取文本框,下拉框,单选框的值的简单实例

 本篇文章主要是对JS获取文本框,下拉框,单选框值的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 1.文本框   1.1 <input type="text" name="test" id="test">   通过var t=document.getElementById("test").value把值赋给变量t,   1.2 当然也可以反过来把已知的变量值赋给文本框,例如:   var m =

JS获取select的value和text值的简单实例

 本篇文章主要是对JS获取select的value和text值的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 代码如下: <select id = "cityList" >    <select id = "selectId" >       <option value = "0">第0个</option>    </select>      <script&g

fragmentactivity-当Fragment视图存在时,FragmentActivity如何传值,Fragment如何接收值?求实例

问题描述 当Fragment视图存在时,FragmentActivity如何传值,Fragment如何接收值?求实例 当Fragment视图存在时,FragmentActivity如何传值,Fragment如何接收值?求实例 解决方案 很多方法,handler或者发送广播都可以 解决方案二: 使用eventbus进行通讯 解决方案三: 1.Fragment是依托于Activity的所以 2.在Fragment的生命周期方法中可以调用getActivity();方法 3.通过此方法获得当前Frag