设为首页
收藏本站
Archiver
用户
登录
入住
用户名
Email
自动登录
找回密码
密码
登录
入住 CI 中国社区
首页
返回 CodeIgniter 中国首页
论坛
BBS
导读
Guide
个人主页
Space
中文手册
搜索
CodeIgniter 搜索引擎
视频教程
案例
任务
搜索
搜索
本版
帖子
用户
设为首页
收藏本站
Archiver
开启辅助访问
切换到宽版
日志
相册
分享
记录
CodeIgniter4
CodeIgniter3
CodeIgniter2
帖子
好友
道具
勋章
收藏
任务
记录
留言板
设置
我的收藏
退出
腾讯QQ
微信登录
CodeIgniter 中国开发者社区
»
论坛
›
CodeIgniter 开发
›
CodeIgniter 问答求助
›
请教单例模式
返回列表
查看:
3992
|
回复:
9
[已解决]
请教单例模式
[复制链接]
rosen
rosen
当前离线
积分
14
IP卡
狗仔卡
发表于 2010-9-19 17:39:34
|
显示全部楼层
|
阅读模式
自定义的library能以单例模式使用么?
我的自定义库构造函数需要打开一个非常大的文件,从其他开发语言上的经验来看,频繁的访问(开、关)文件系统,对性能不是啥好事。
所以,我想对该自定义类(库)进行单例化,只在第一次调用构造函数的时候才去打开文件,并始终保持开启状态不关闭。
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
Hex
Hex
当前离线
积分
50165
IP卡
狗仔卡
发表于 2010-9-20 00:12:31
|
显示全部楼层
CI 里所有通过 load 装载的都是单例模式的。
回复
支持
反对
使用道具
举报
显身卡
rosen
rosen
当前离线
积分
14
IP卡
狗仔卡
楼主
|
发表于 2010-9-20 11:06:50
|
显示全部楼层
喔,感谢版主。
只是有点疑惑的是,我在构造函数中fopen然后在方法中fclose,下次竟然还能在方法中fread到数据。所以我以为不是单例的。可能是我没弄清楚php操作文件的内部机制
回复
支持
反对
使用道具
举报
显身卡
Hex
Hex
当前离线
积分
50165
IP卡
狗仔卡
发表于 2010-9-20 11:21:15
|
显示全部楼层
“下次”,你指的是什么?下次请求?
回复
支持
反对
使用道具
举报
显身卡
rosen
rosen
当前离线
积分
14
IP卡
狗仔卡
楼主
|
发表于 2010-9-20 11:38:50
|
显示全部楼层
举例
在自定义类的构造函数中打开文件
$this->handler = fonen("xxxx.xx")
放在本类的成员变量中。
然后在一个业务方法a()中
$fd = $this->handler;
fread($fd)
用完以后fclose($fd)
按照单例思路,下一次通过$this->自定义类->a(),在进行fread($fd)的时候,应该会抛出异常才对(至少java是这样),因为上一次已经fclose($fd)了。
回复
支持
反对
使用道具
举报
显身卡
rosen
rosen
当前离线
积分
14
IP卡
狗仔卡
楼主
|
发表于 2010-9-20 11:42:03
|
显示全部楼层
本帖最后由 rosen 于 2010-9-20 11:54 编辑
又是另外一个话题,貌似$fd = $this->handler;是传值引用而不是传址?
貌似也不是这个问题,我直接在a()中使用$this->handler,然后对其进行fclose,下次还是照样能fread
但我又echo $this->handler,发现每次的资源id都没变化,说明的确只有一个实例.......
回复
支持
反对
使用道具
举报
显身卡
jeongee
jeongee
当前离线
积分
5618
IP卡
狗仔卡
发表于 2010-9-20 14:33:10
|
显示全部楼层
你那样用的话不管单例什么事情的
回复
支持
反对
使用道具
举报
显身卡
rosen
rosen
当前离线
积分
14
IP卡
狗仔卡
楼主
|
发表于 2010-9-20 14:44:06
|
显示全部楼层
目前也没什么问题,先这样用吧。
回复
支持
反对
使用道具
举报
显身卡
mengdejun
mengdejun
当前离线
积分
201
IP卡
狗仔卡
发表于 2010-9-25 20:05:31
|
显示全部楼层
单例模式就是为了让程序运行期间始终只能存在一个当前类的引用(实例) 以达到某些控制的功能 常见的有数据库连接池等等 要想实现单例模式 首先将类的构造方法私有化 然后提供一个全局的方法返回对象的唯一实例
PHP
复制代码
<?php
class
A
{
private
static
$_ins
=
null
;
private
function
A
(
)
{
}
public
static
function
getInstance
(
)
{
if
(
!
(
self
::
$_ins
instanceof
self
)
)
self
::
$_ins
=
new
self
;
return
self
::
$_ins
;
}
}
?>
复制代码
回复
支持
反对
使用道具
举报
显身卡
mengdejun
mengdejun
当前离线
积分
201
IP卡
狗仔卡
发表于 2010-9-25 20:08:53
|
显示全部楼层
ez.rar
(191.95 KB, 下载次数: 19)
2010-9-25 20:06 上传
点击文件名下载附件
ezmvc
给你个参考文件 是我写的一个开发框架 里面大量运用了单例模式MVC http://code.google.com/p/ezmvc
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
入住 CI 中国社区
本版积分规则
发表回复
回帖后跳转到最后一页