php单例模式多请求中,(PHP)单例模式 怎么蹦出好多问题, 烦请大家帮忙指点一二...

本文通过一个简单的PHP单例模式示例,解释了单例模式的核心特征:确保类只有一个实例,并提供全局访问点。同时,讨论了PHP变量的生命周期,指出单例对象仅在当前请求中存在,每次请求都会创建新的实例。此外,提到了单例模式在管理数据库连接等资源时的优势,避免频繁创建连接对象,但并不涉及数据库连接池的概念。最后,提及了单例模式在框架如ThinkPHP中的应用。
摘要由CSDN通过智能技术生成

首先,我们来看一个完整的、规范的、简单的单例模式的例子:

class User {

//静态变量保存全局实例

private static $_instance = null;

//私有构造函数,防止外界实例化对象

private function __construct() {

}

//私有克隆函数,防止外办克隆对象

private function __clone() {

}

//静态方法,单例统一访问入口

static public function getInstance() {

if (is_null ( self::$_instance ) || !isset ( self::$_instance )) {

self::$_instance = new self ();

}

return self::$_instance;

}

public function getName() {

echo 'hello world!';

}

}

$user = User::getInstance();

?>

下面回答问题:

1、你可以随便改你所谓的单例模式类,但是单例的核心是不能变的:产出一个实例;每次使用同一个实例对象;;如果你把private改成protected可以,但是这就无限实例了不是吗?不符合单例模式的设计规范呀;

2、这就是php的变量生命周期问题了。php所有的变量生命周期,一般情况下只存在于请求开始->请求结束,每次请求每个变量重新被赋值,每个对象被重新实例化;请求结束,自动释放;单例模式的的意义是:对象只被实例化一次,每次调用返回同一个实例;你的单例的生命周期只存在于这一请求过程中,请求结束,就没了。再次请求,从新生成新的单例;没毛病呀

3、滥用什么服务都会造成不好的影响;就你现在举这个例子而言,对数据库链接使用单例模式的话,每次使用的时候,都是用的同一静态内存区(类中static声明的变量默认保存在静态内存区中)的变量,所以只要实例化一次,之后在同一请求中使用的时候,就不会增加额外的数据库连接对象了。

而你说的连接池指的是数据库的连接池吧,这个连接池是有内存限制,也有最大,最小连接限制,而且是可以在mysql的配置文件中设置的。具体请参考《MySql数据库连接池专题》的介绍。

4、对TP的源码没看过,不方便回答。

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值