PHP , 我们自己的函数,需要 function_exists 判断吗?

2017-01-24 09:28:08 +08:00
 ioioioioioioi
3643 次点击
所在节点    PHP
20 条回复
treedon
2017-01-24 09:35:38 +08:00
啥意思 ?
foursking
2017-01-24 09:39:20 +08:00
你是担心什么?和系统或者其他类库的函数冲突还是担心不存在? 前者的话你使用 namespace 就行,后者的话函数不是公共引入的嘛,真的不放心就 function_exists 判断吧,不过个人觉得没必要
HanSonJ
2017-01-24 09:42:24 +08:00
如果是作为一个包,建议使用,毕竟不确定是否会跟第三方包冲突

如果只是用于自己项目,可以不使用
ioioioioioioi
2017-01-24 09:44:59 +08:00
@HanSonJ 自己的项目,倾向于不使用,不然要写好多 if
HanSonJ
2017-01-24 09:47:00 +08:00
@ioioioioioioi #4 问题是,你也不会有这么多全局方法吧,面向对象编程为主
joeke
2017-01-24 09:55:38 +08:00
自己写一个类的时候,会把,但是不至于每个都写
Jakesoft
2017-01-24 10:43:54 +08:00
是的,用命名空间, \vendr\package\funcname();

不过这个年代最好还是面向对象编程吧,配合一个好的 ide (当然我是在说 phpstorm ), autocomplete 、 type inspect 等不要太爽。
Jakesoft
2017-01-24 10:45:37 +08:00
还有 git integration ,(额,听说说英文有提升逼格...)
ioioioioioioi
2017-01-24 11:03:14 +08:00
@Jakesoft 自己常用的函数,用命名空间,觉得太累。比如, ip() , 用上命名空间后,可能就是 \MyProject\Helpers\ip()
barbery
2017-01-24 11:33:56 +08:00
从代码健壮性来考虑,要!
1762628386
2017-01-24 13:21:56 +08:00
最好别,到时候你等你用了,如果真有 2 个重名的方法,返回值不一样,你都不知道是什么错,你不写 function_exists 至少会报致命错误!!!!!
jianzhiyao020
2017-01-24 13:50:09 +08:00
如果,为了兼容性是要的, PHP 有些版本不支持某些函数,但是你又想要实现一模一样的功能的话
cxbig
2017-01-24 15:02:28 +08:00
哪怕自己写 binary 做 so 文件,最好也用 Object 封装,图方便可以全用 static 。
单纯的 fn 集合至少要加个唯一的前缀,如 FANN 系列
http://php.net/manual/en/book.fann.php
ioioioioioioi
2017-01-24 15:22:40 +08:00
@cxbig 因为引用别人的库都会有前缀,加入的 class 也会有 namespace , 所以自己的项目里独有的东西倾向于不加前缀。
mhycy
2017-01-24 15:42:01 +08:00
防御式开发“不应”用于此处。
代码问题就该老老实实抛出异常。

就像不应使用 try catch 来捕获因代码文件缺失而导致的异常,这样会隐藏问题的准确位置。
cxbig
2017-01-24 21:38:07 +08:00
@ioioioioioioi 除非你有信心一个项目做到底。不然当下图省事,后续接手的人就很痛苦。
个人不建议直接写全局 fn ,哪怕只有一个也要放进 Object 里。
msg7086
2017-01-25 01:07:11 +08:00
@cxbig 做到底也不行的。我们这边的几个元老就是这么干的。后来他们自己也看不懂自己的代码在做什么了。
cxbig
2017-01-25 01:19:38 +08:00
@msg7086
所以我们团队代码审查里的一个重要指标就是检查 PHPDoc ,会严格要求开发者把所有类里的方法和属性的用途描述清楚。命名规范这些更是挑剔。
甭管你多大牌,只要有团队成员不能理解就不给过。
长期看可以节省了很多维护成本。
msg7086
2017-01-25 01:23:02 +08:00
@cxbig 真好。我进公司那会儿毛都没有。没注释没代码审查,一个文件七八千行的业务逻辑,现在就呵呵了。
lslqtz
2017-01-25 08:21:44 +08:00
我觉得不应该做 兼容老版本的话可以在函数里用一个特定的来根据版本“转发”自带函数
冲突问题应该让代码抛出致命错误

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/336576

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX