codecamp

DI服务速查:各资源服务一览表

“完成,好过完美。” -- 脸谱书文化之一

1.19.1 一览表

变量名称是否启动时自动注册是否必须接口/类作用说明
loader否是PhalApi_Loader自动加载:负责PEAR风格下类的自动加载,需要手动注册,指定项目路径
config否是PhalApi_Config配置:负责项目配置的读取,需要手动注册,指定存储媒介,默认是PhalApi_Config_File
logger否是PhalApi_Logger日志纪录:负责日志的写入,需要手动注册,指定日志级别和存储媒介,默认是PhalApi_Logger_File
request是是PhalApi_Request接口参数请求:用于收集接口请求的参数
response是是PhalApi_Response结果响应:用于输出返回给客户端的结果,默认为PhalApi_Response_Json
notorm否推荐PhalApi_DB_NotORM数据操作:基于NotORM的DB操作,需要手动注册,指定数据库配置
cache否推荐PhalApi_Cache缓存:实现缓存读写,需要手动注册,指定缓存
filter否推荐PhalApi_Filter拦截器:实现签名验证、权限控制等操作
crypt否否PhalApi_Crypt对称加密:实现对称加密和解密,需要手动注册
curl否否PhalApi_CUrlCURL请求类:通过curl实现的快捷方便的接口请求类,需要手动注册
cookie否否PhalApi_CookieCOOKIE的操作
debug否否boolean应用级的调试开关,通常可从配置读取,暂时框架未用到
_formatterArray否否PhalApi_Request_Formatter_Array数组格式化服务(系统内部使用)
_formatterBoolean否否PhalApi_Request_Formatter_Boolean布尔值格式化服务(系统内部使用)
_formatterCallable否否PhalApi_Request_Formatter_Callable回调格式化服务(系统内部使用)
_formatterDate否否PhalApi_Request_Formatter_Date日期格式化服务(系统内部使用)
_formatterEnum否否PhalApi_Request_Formatter_Enum枚举格式化服务(系统内部使用)
_formatterFile否否PhalApi_Request_Formatter_File上传文件格式化服务(系统内部使用)
_formatterFloat否否PhalApi_Request_Formatter_Float浮点数格式化服务(系统内部使用)
_formatterInt否否PhalApi_Request_Formatter_Int整数格式化服务(系统内部使用)
_formatterString否否PhalApi_Request_Formatter_String字符串格式化服务(系统内部使用)

1.19.2 DI服务是否已注册的判断误区

(1)错误的判断方法

当需要判断一个DI服务是否已被注册,出于常识会这样判断:

if (isset(DI()->cache)) {

但这样的判断永远为false,不管注册与否。

追其原因在于,DI类使用了魔法方法的方式来提供类成员属性,并存放于PhalApi_DI::$data中。

这就导致了如果直接使用isset(DI()->cache)的话,首先不会触发魔法方法 PhalApi_DI::__get($name)的调用,其次也确实没有PhalApi_DI::$cache这个成员属性,最终判断是否存在时都为false。

简单来说,以下两种判断,永远都为false:

//永远为false
var_dump(isset(DI()->XXX));
var_dump(!empty(DI()->XXX));

(2)正确判断的写法:先获取,再判断

正确的用法应该是:

//先获取,再判断
$XXX = DI()->XXX;
var_dump(isset($XXX));
var_dump(!empty($XXX));

这里,可能会对大家带来一定的困惑,所以在这里特别进行说明。也对框架中这一点不合理的设计深感抱歉。

快速函数:人性化的关怀
DB操作:数据库基本操作速查
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

八、视频教程

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }