ioioioioioioi
V2EX  ›  PHP

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

  •  
  •   ioioioioioioi · Jan 24, 2017 · 4276 views
    This topic created in 3423 days ago, the information mentioned may be changed or developed.
    Supplement 1  ·  Jan 24, 2017
    @cxbig 不会痛苦啊,函数都是写在一个文件里的,如果需要,某个加个 function_exists 便可。 类其实是有 namespace 的,但是在配置文件中,都加了 shortcut ,如果要改也很简单,把 shortcut 一行去掉,然后整个项目搜索替换便可,比如\cache:: 替换成\MyProjectNameSpace\Cache:: 分别类似 Laravel 的 helper 和 Facade
    Supplement 2  ·  Jan 24, 2017
    V2EX 应该有什么关键字过滤,现在不能回复别人了。。。
    20 replies    2017-01-25 08:21:44 +08:00
    treedon
        1
    treedon  
       Jan 24, 2017
    啥意思 ?
    foursking
        2
    foursking  
       Jan 24, 2017
    你是担心什么?和系统或者其他类库的函数冲突还是担心不存在? 前者的话你使用 namespace 就行,后者的话函数不是公共引入的嘛,真的不放心就 function_exists 判断吧,不过个人觉得没必要
    HanSonJ
        3
    HanSonJ  
       Jan 24, 2017   ❤️ 1
    如果是作为一个包,建议使用,毕竟不确定是否会跟第三方包冲突

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

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

    就像不应使用 try catch 来捕获因代码文件缺失而导致的异常,这样会隐藏问题的准确位置。
    cxbig
        16
    cxbig  
       Jan 24, 2017
    @ioioioioioioi 除非你有信心一个项目做到底。不然当下图省事,后续接手的人就很痛苦。
    个人不建议直接写全局 fn ,哪怕只有一个也要放进 Object 里。
    msg7086
        17
    msg7086  
       Jan 25, 2017
    @cxbig 做到底也不行的。我们这边的几个元老就是这么干的。后来他们自己也看不懂自己的代码在做什么了。
    cxbig
        18
    cxbig  
       Jan 25, 2017
    @msg7086
    所以我们团队代码审查里的一个重要指标就是检查 PHPDoc ,会严格要求开发者把所有类里的方法和属性的用途描述清楚。命名规范这些更是挑剔。
    甭管你多大牌,只要有团队成员不能理解就不给过。
    长期看可以节省了很多维护成本。
    msg7086
        19
    msg7086  
       Jan 25, 2017
    @cxbig 真好。我进公司那会儿毛都没有。没注释没代码审查,一个文件七八千行的业务逻辑,现在就呵呵了。
    lslqtz
        20
    lslqtz  
       Jan 25, 2017
    我觉得不应该做 兼容老版本的话可以在函数里用一个特定的来根据版本“转发”自带函数
    冲突问题应该让代码抛出致命错误
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   945 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 21:39 · PVG 05:39 · LAX 14:39 · JFK 17:39
    ♥ Do have faith in what you're doing.