PHP , 我们自己的函数,需要 function_exists 判断吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ioioioioioioi
V2EX    PHP

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

  •  
  •   ioioioioioioi 2017 年 1 月 24 日 4218 次点击
    这是一个创建于 3377 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言    2017 年 1 月 24 日
    @cxbig 不会痛苦啊,函数都是写在一个文件里的,如果需要,某个加个 function_exists 便可。 类其实是有 namespace 的,但是在配置文件中,都加了 shortcut ,如果要改也很简单,把 shortcut 一行去掉,然后整个项目搜索替换便可,比如\cache:: 替换成\MyProjectNameSpace\Cache:: 分别类似 Laravel 的 helper 和 Facade
    第 2 条附言    2017 年 1 月 24 日
    V2EX 应该有什么关键字过滤,现在不能回复别人了。。。
    20 条回复    2017-01-25 08:21:44 +08:00
    treedon
        1
    treedon  
       2017 年 1 月 24 日
    啥意思 ?
    foursking
        2
    foursking  
       2017 年 1 月 24 日
    你是担心什么?和系统或者其他类库的函数冲突还是担心不存在? 前者的话你使用 namespace 就行,后者的话函数不是公共引入的嘛,真的不放心就 function_exists 判断吧,不过个人觉得没必要
    HanSonJ
        3
    HanSonJ  
       2017 年 1 月 24 日   1
    如果是作为一个包,建议使用,毕竟不确定是否会跟第三方包冲突

    如果只是用于自己项目,可以不使用
    ioioioioioioi
        4
    ioioioioioioi  
    OP
       2017 年 1 月 24 日
    @HanSonJ 自己的项目,倾向于不使用,不然要写好多 if
    HanSonJ
        5
    HanSonJ  
       2017 年 1 月 24 日
    @ioioioioioioi #4 问题是,你也不会有这么多全局方法吧,面向对象编程为主
    joeke
        6
    joeke  
       2017 年 1 月 24 日
    自己写一个类的时候,会把,但是不至于每个都写
    Jakesoft
        7
    Jakesoft  
       2017 年 1 月 24 日
    是的,用命名空间, \vendr\package\funcname();

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

    就像不应使用 try catch 来捕获因代码文件缺失而导致的异常,这样会隐藏问题的准确位置。
    cxbig
        16
    cxbig  
       2017 年 1 月 24 日
    @ioioioioioioi 除非你有信心一个项目做到底。不然当下图省事,后续接手的人就很痛苦。
    个人不建议直接写全局 fn ,哪怕只有一个也要放进 Object 里。
    msg7086
        17
    msg7086  
       2017 年 1 月 25 日
    @cxbig 做到底也不行的。我们这边的几个元老就是这么干的。后来他们自己也看不懂自己的代码在做什么了。
    cxbig
        18
    cxbig  
       2017 年 1 月 25 日
    @msg7086
    所以我们团队代码审查里的一个重要指标就是检查 PHPDoc ,会严格要求开发者把所有类里的方法和属性的用途描述清楚。命名规范这些更是挑剔。
    甭管你多大牌,只要有团队成员不能理解就不给过。
    长期看可以节省了很多维护成本。
    msg7086
        19
    msg7086  
       2017 年 1 月 25 日
    @cxbig 真好。我进公司那会儿毛都没有。没注释没代码审查,一个文件七八千行的业务逻辑,现在就呵呵了。
    lslqtz
        20
    lslqtz  
       2017 年 1 月 25 日
    我觉得不应该做 兼容老版本的话可以在函数里用一个特定的来根据版本“转发”自带函数
    冲突问题应该让代码抛出致命错误
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     907 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 69ms UTC 19:40 PVG 03:40 LAX 12:40 JFK 15:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86