kkk 发表于 2011-2-14 16:45:35

关于helper中每个函数都得判断存在的疑问

有个问题想问很久了,就是为什么在所有helper中,都是首先判断函数是否存在?不如form_helper中,截图如下

106185050 发表于 2011-2-14 17:00:45

可能是出于防止覆盖吧

Hex 发表于 2011-2-14 18:04:42

如果这个函数在其他地方已经定义了,这里就会报重定义错误。
报错永远不是好事情~~

kkk 发表于 2011-2-14 18:15:29

回复 3# Hex


   感谢老大的指点,这点我真从未考虑过,只是个人觉得每次都得if(!function_exist){**}是不是有点繁琐?

Hex 发表于 2011-2-14 18:34:34

为了程序健壮性,这不算繁琐吧。

不这样做我确实遇到过和其他类库冲突的情况,到那时就傻眼了,呵呵

visvoy 发表于 2011-2-14 18:58:58

ci的helper做这个判断是为了重载helper,你看CI_Loader::helper()源码就知道了,
ci会先加载system/helpers里面的文件,然后再加载app下面的helper(如果有)
如果你在app/helpers/url_helper.php自己重新写了一个function site_url()
ci如果不做function_exists判断,那必然就报错了

kkk 发表于 2011-2-14 21:43:23

回复 6# visvoy


    不仅仅是helper,library、model等都是先从applicant中找没有才开始找system,这点我理解。
万一我是在别的地方(不是system也不是application)定义一个函数,跟helper中的重名了,会不会产生错误呢?这点我没测试过,不过看代码估计理论上不会。

Hex 发表于 2011-2-15 00:38:49

不会,只要判断了就不会有错误。

kkk 发表于 2011-2-15 09:11:39

回复 8# Hex


   谢谢Hex(十六进制/魔女)的解答:)
页: [1]
查看完整版本: 关于helper中每个函数都得判断存在的疑问