PHP 到底该怎么定义全局函数
看到很多的各种编程规范都要求,定义函数要先 function_exists
判断一下再定义,我觉得是很不合理的。这样写给我一种感觉,婊子立牌坊,还不知道嫖客到底光顾了没有
我拒绝的理由如下:
- 增加了排错难度,假设之前有了同名函数,只会调用先定义的。自己后定义的函数没有被光顾,你要找到错误需要看调用栈,到底光顾了哪一个。假设没有这么判断一下,IDE在写的时候就会立刻提示错误,运行时也会出来会立马爆出函数重复定义的致命错误。
- 如果所有的package定义的全局函数都这么先判断一下。如果发生了同名,这是很恐怖的事情,只有一个package能正常工作,其他都不能正常工作。
大家这么追捧这样定义函数,大部分原因应该是受到了laravel的影响。在我理解laravel这么写,是因为它站在一个框架的角度,一个调用链的末端,宁愿自身牺牲一些辅助函数,也要让别的包能好好运行,从而整个框架能正常的开箱。
但是我们使用框架再来开发就没必要这么写了,因为我们站在调用链的末端,定义的函数是一定要用到的,是一定不能向其他package妥协的,不然真是那句话 婊子立牌坊,还不知道嫖客到底光顾了没有
想要定义规范,我有一点建议。在编写给别人使用的package,应该给辅助函数加上命名空间。这样一来,所有冲突都没有了。像是laravel框架也不用来迁就你的包,而自损自己的函数,还写那么多if降低一点性能。
所以最后的结论就是不要在定义函数的时候多一层判断了!
2017-03-17 14:34:47 update
发现一种情况要需要使用 function_exists
比如password系列函数php5.5.0以上才支持。假如在低版本想使用password系列函数,就只能自己实现了,所以要用 function_exists
判断一下,用来兼容更多php版本。除了这个情况,还是不应该多一层判断,以至于现在都是滥用的感觉。
推荐文章: