今天在对dede的问答模块进行修改的时候发现直接调用/include/helpers/archive.helper.php文件中的函数居然是可行的,但是找遍了ask模块的所有代码都没有发现这个是文件如何引入的。我记得有人说过dede的helper文件由系统自动引入,不需要自己手动完成。但是这个东西是如何自动引入的呢,是所有的地方都能用/include/helpers/目录下面的所有文件吗? 答案是否。 官方之所以说/include/helpers/下面的文件自动引入 是因为dede的php文件中几乎都re […]
今天在对dede的问答模块进行修改的时候发现直接调用/include/helpers/archive.helper.php文件中的函数居然是可行的,但是找遍了ask模块的所有代码都没有发现这个是文件如何引入的。我记得有人说过dede的helper文件由系统自动引入,不需要自己手动完成。但是这个东西是如何自动引入的呢,是所有的地方都能用/include/helpers/目录下面的所有文件吗?
答案是否。
官方之所以说/include/helpers/下面的文件自动引入 是因为dede的php文件中几乎都require了/include/common.inc.php这个初始化文件,而这个文件中完成了对所有/include/helpers/下面的文件自动引入。相关代码如下:
01 |
if (file_exists(DEDEDATA. '/helper.inc.php' )) |
03 |
require_once(DEDEDATA. '/helper.inc.php' ); |
04 |
// 若没有载入配置,则初始化一个默认小助手配置 |
05 |
if (!isset($cfg_helper_autoload)) |
07 |
$cfg_helper_autoload = array( 'util' , 'charset' , 'string' , 'time' , 'cookie' ); |
10 |
helper($cfg_helper_autoload); |
|
这段代码的意思是如果变量$cfg_helper_autoload已经存在,则执行helper($cfg_helper_autoload);而默认是存在的。helper()这个函数实现了具体引入哪些/include/helpers/下面的文件,是哪些呢,这要取决于$cfg_helper_autoload变量的内容。
我们看看这个$cfg_helper_autoload里面有些什么东西。原来这个变量是在/data//helper.inc.php中定义的:
03 |
$cfg_helper_autoload = array |
05 |
'charset' , /* 编码小助手 */ |
06 |
'channelunit' ,/* 模型单元小助手 */ |
07 |
'string' , /* 字符串小助手 */ |
11 |
'validate' , /* 数据验证小助手 */ |
12 |
'filter' , /* 过滤器小助手 */ |
13 |
'cookie' , /* cookies小助手 */ |
15 |
'archive' , /* 文档小助手 */ |
|
看到了吧 默认引用的helper中已经包括了archive文档小助手,而ask模块一开始就是require了/include/common.inc.php的,因此一层一层的分析下来,可以得出这样的结论,凡是引入和/include/common.inc.php文件的php代码,都是能直接执行默认的那几个助手小工具里面的代码的。