php单例模式如何实现(php的单例模式有什么具体好处具体在哪里实现面试的时候让人问到..求解)

本文目录
- php的单例模式有什么具体好处具体在哪里实现面试的时候让人问到..求解
- 新手求助:php单例模式 问题如下
- php如何实现的mongoDB单例模式操作类
- 请教一个问题.单例模式适用什么场景,不适用什么场景
- 为什么要使用PHP单例模式及应用实例
php的单例模式有什么具体好处具体在哪里实现面试的时候让人问到..求解
单例不只是PHP中有,是面向对象类语言都有的概念。
你说的是做用,是从语言层面上。只有一个实例。
我觉得面试官要问的是实际使用的含义,对于整个程序设计而言的好处。
我本身也不是什么高手,觉得我说的不对轻喷。
我也用过PHP的TP框架,但是用的很浅,没有体会到有什么特别的。
我说说java的spring框架,它的bean实例化是单例的,struts2也支持选择是否单例。
它能节约内存开销,这是最明显的,一个工具类,或者一个服务类,单例下,一个实例足够,并不需要创建N此,无故的浪费掉内存。
从设计上而言,一个只需要实例化一次就足够的类,设计为单例,这样可以做到从设计上而言更清晰
新手求助:php单例模式 问题如下
1、 private $conf = array; //这个的作用是什么?
这只是为了初始化一个属性罢了,等于什么不重要。NULL也可以,在下面的代码中它会被重新赋值。另外,如果希望初始值是数组的话,这样写是错的。应该是 = array();
2、$this-》conf = conf::getIns(); //这个属性可以访问getins(); 有什么作用
你这里应该还有另一个 class conf 吧。它只是调用另一个类的方法,取回结果并赋值到 $conf 上罢了(上面说过的)
3、$this-》connect($this-》conf-》host,$this-》conf-》user,$this-》conf-》pwd);//这个是不是把host,conf,pwd分别放在数组里...
把取回来的结果做为参数交给下面的方法。。这里从头到尾和数组一点关系也没有。只是最基本的变量传来传去罢了。
php如何实现的mongoDB单例模式操作类
class Mongo_db{ private static $cli; /** * 不允许初始化 */ private function __construct() { $config = Config::get(’config.mongo_config’); if(empty($config)){ $this-》throwError(’无法连接数据库!’); } if (!empty($config); } } /** * 单例模式 * @return Mongo|null */ public static function cli(){ if(!(self::$cli instanceof self)){ self::$cli = new self(); } return self::$cli-》mongo; }}$mongo = Mongo_db::cli()-》test-》mycollection;
请教一个问题.单例模式适用什么场景,不适用什么场景
单例模式要点三:
某类能实例;
二必须自行创建实例;
三必须自行向整系统提供实例
复制代码 代码:
《?php
/* 单例模式举例,其要点:
*
* 1. $_instance 必须声明静态私变量
* 2. 构造函数克隆函数必须声明私,防止外部程序 new 类失单例模式意义
* 3. getInstance()必须声明公,必须调用返唯实例引用
* 4. ::操作符能访问静态变量或静态函数
* 5. PHP单例模式相言,PHP解释运行机制使每PHP页面解释执行所相关资源都收
* 说PHP语言级别没办让某象驻内存PHP所变量都页面级论全局变量
* 类静态员都页面执行完毕清空,结重新建立新象完全失Singleton意义
* ,实际应用同页面能存业务逻辑,单例模式起重要作用,效避免重复
* new 象(注: new 象消耗内存资源)行,所我说PHP单例模式相言
*
*/
class People
{
static private $_instance = NULL;
public $height = ’’;
public $age = ’’;
private function __construct()
{
$this-》height = ’185’;
$this-》age = 25;
}
private function __clone()
{
//do something
}
static public function getInstance()
{
if(!self::$_instance instanceof self)
{
//echo ’lgh-big’;
self::$_instance = new self;
}
else
{
//for testing only
//echo ’gdc-xiaoairener’;
}
return self::$_instance;
}
public function getHeight()
{
echo $this-》height;
}
public function getAge()
{
echo $this-》age;
}
}
function testInstance()
{
People::getInstance()-》getAge();
}
//begin to use the class
$lgh = People::getInstance();
$lgh-》getHeight();
echo ’
’;
testInstance();
?》
优点:单例模式避免量new操作每new操作都消耗内存资源系统资源
缺点:PHP所变量论全局变量类静态员都 页面级每页面执行都重新建立新象都页面执行完毕清空似乎PHP单例模式没意义所PHP单例模式我觉 针单页面级请求现应用场景并需要共享同象资源非意义
Why–要使用PHP单例模式
PHP主要应用场合应用程序与数据库打交道应用场景所应用存量数据库操作比数据库句柄连接数据库行使用单例模式避免量new操作每new操作都消耗内存资源系统资源
些抽象给代码片段
使用传统式编码
复制代码 代码:
《?php
......
//初始化数据库句柄
$db = new DB(...);
//比应用场景添加条用户信息:
$db-》addUserInfo();
......
//我另外能要查找用户信息情景现函数要用数据库句柄资源我能需要做
......
function test(){
......
//我重新初始化数据库句柄,试想应用场景代码怕啊
$db = new DB(...);
$db-》getUserInfo();
......
//些朋友或许说我做啊我直接利用global关键字确global解决问题起单例模式作用OOP我拒绝编写代码global存安全隐患请参考相关书籍同单例模式恰恰全局变量种改进避免些存储唯实例全局变量污染命名空间
global $db; //OOP我提倡编写代码
......
}
使用单例模式编码
复制代码 代码:
《?php
......
//所应用情景数据库句柄资源嘿嘿效率高
//资源节省代码简洁明:)
DB::getInstance()-》addUserInfo();
DB::getInstance()-》getUserInfo();
......
How–何编写PHP单例模式
解单例模式应用场景面我通编写单例模式具体实现代码掌握PHP单例模式核要点代码:
复制代码 代码:
《?php
/**
* PHP单例模式演示举例
* @author guohua.li
* @modify 2010-07-11
* @website
*/
class User{
/**
* 静态品变量 保存全局实例
* @access private
*/
static private $_instance = NULL;
/**
* 私化构造函数防止外界实例化象
*/
private function __construct() {}
/**
* 私化克隆函数防止外界克隆象
*/
private function __clone(){}
/**
* 静态, 单例统访问入口
* @return object 返象唯实例
*/
static public function getInstance() {
if (is_null(self::$_instance) || !isset(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
/**
* 测试: 获取用户名字
*/
public function getName() {
echo ’hello liguohua!’;
}
}
代码我总结PHP单例模式实现核要点三条:
1.需要保存类唯实例静态员变量(通$_instance私变量)
2.构造函数克隆函数必须声明私防止外部程序new类失单例模式意义
3.必须提供访问实例公共静态(通getInstance)返唯实例引用
PHP单例模式缺点
众所周知PHP语言种解释型脚本语言种运行机制使每PHP页面解释执行所相关资源都收说PHP语言级别没办让某象驻内存asp.net、Java等编译型同比Java单例直存于整应用程序命周期变量跨页面级真做实例应用程序命周期唯性PHP所变量论全局变量类静态员都页面级每页面执行都重新建立新象都页面执行完毕清空似乎PHP单例模式没意义所PHP单例模式我觉针单页面级请求现应用场景并需要共享同象资源非意义
为什么要使用PHP单例模式及应用实例
单例模式顾名思义,就是只有一个实例。作为对象的创建模式,
单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类我们称之为单例类。单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。下面我们讨论下为什么要使用PHP单例模式?多数人都是从单例模式的字面上的意思来理解它的用途,
认为这是对系统资源的节省,
可以避免重复实例化,
是一种"计划生育".
而PHP每次执行完页面都是会从内存中清理掉所有的资源.
因而PHP中的单例实际每次运行都是需要重新实例化的,
这样就失去了单例重复实例化的意义了.
单单从这个方面来说,
PHP的单例的确有点让各位失望.
但是单例仅仅只有这个功能和应用吗?
答案是否定的,我们一起来看看。1.
php的应用主要在于数据库应用,
所以一个应用中会存在大量的数据库操作,
在使用面向对象的方式开发时(废话),
如果使用单例模式,
则可以避免大量的new
操作消耗的资源。2.
如果系统中需要有一个类来全局控制某些配置信息,
那么使用单例模式可以很方便的实现.
这个可以参看zend
Framework的FrontController部分。

更多文章:
avantage怎么设置为中文(Avantage安装丢失GIT)
2026年10月15日 03:00
activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)
2026年10月14日 20:30
excel连接sql数据库教程(excel怎么连接sql数据库)
2026年10月14日 19:40






