用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2998|回复: 8
收起左侧

[已解决] 关于helper中每个函数都得判断存在的疑问

[复制链接]
发表于 2011-2-14 16:45:35 | 显示全部楼层 |阅读模式
有个问题想问很久了,就是为什么在所有helper中,都是首先判断函数是否存在?不如form_helper中,截图如下
helper.jpg
发表于 2011-2-14 17:00:45 | 显示全部楼层
可能是出于防止覆盖吧
发表于 2011-2-14 18:04:42 | 显示全部楼层
如果这个函数在其他地方已经定义了,这里就会报重定义错误。
报错永远不是好事情~~

评分

参与人数 1威望 +5 收起 理由
kkk + 5

查看全部评分

 楼主| 发表于 2011-2-14 18:15:29 | 显示全部楼层
回复 3# Hex


   感谢老大的指点,这点我真从未考虑过,只是个人觉得每次都得if(!function_exist){**}是不是有点繁琐?
发表于 2011-2-14 18:34:34 | 显示全部楼层
为了程序健壮性,这不算繁琐吧。

不这样做我确实遇到过和其他类库冲突的情况,到那时就傻眼了,呵呵
发表于 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判断,那必然就报错了
 楼主| 发表于 2011-2-14 21:43:23 | 显示全部楼层
回复 6# visvoy


    不仅仅是helper,library、model等都是先从applicant中找没有才开始找system,这点我理解。
  万一我是在别的地方(不是system也不是application)定义一个函数,跟helper中的重名了,会不会产生错误呢?这点我没测试过,不过看代码估计理论上不会。
发表于 2011-2-15 00:38:49 | 显示全部楼层
不会,只要判断了就不会有错误。
 楼主| 发表于 2011-2-15 09:11:39 | 显示全部楼层
回复 8# Hex


   谢谢Hex(十六进制/魔女)的解答:)

本版积分规则