代码之家  ›  专栏  ›  技术社区  ›  Milan BabuÅ¡kov

如何在PHP中取消对函数的预测?

  •  28
  • Milan BabuÅ¡kov  · 技术社区  · 16 年前

    在我工作的团队中,我们有一个旧的代码库,在整个代码中使用php的ibase函数与数据库通信。我们为它创建了一个包装器,除了调用原始函数之外,它还可以做其他事情,我在整个代码中进行了大量搜索替换,以确保使用了包装器。

    现在,我们如何防止将来使用ibase_ux函数?

    最好是,我希望它们仍然可用,但在使用时要发出通知或警告。

    最好使用纯PHP(不需要编译自定义版本的PHP)解决方案。

    6 回复  |  直到 7 年前
        1
  •  15
  •   Anonymous    16 年前

    如果我理解正确,您想在使用内置PHP函数时触发错误吗?在这种情况下,看看 Override Function 功能。

        2
  •  42
  •   nickf    16 年前

    trigger_error()

    function my_deprecated_function() {
        trigger_error("Deprecated function called.", E_USER_NOTICE);
        // do stuff.
    }
    
        3
  •  18
  •   Francesco Casula    7 年前

    一般来说,您可以将一个方法标记为已弃用,以向用户提供有关在未来版本中将无法使用的代码的警告。我认为最好的方法是 trigger_error 连同一些 phpdoc .

    /**
     * @deprecated
     *
     * @return $this
     */
    public function oldMethod()
    {
        trigger_error('Method ' . __METHOD__ . ' is deprecated', E_USER_DEPRECATED);
    
        return $this;
    }
    

    这个 @deprecated phpDoc很重要,因为很多IDE都喜欢 PHPStorm 如果您试图使用它,请识别它并删除方法名,因此在实际运行代码之前,您会注意到它已被弃用。

    它或多或少会像这样:

    jetbrains deprecated strikethrough

    除了phpDoc之外,您还可以通过在运行时触发正确的错误来确保用户收到警告。只要确保使用正确的常量(即 E_USER_DEPRECATED )

    E_DEPRECATED 而是由PHP内部使用,因此您应该 使用它。更多信息 here .

        4
  •  6
  •   unexist    16 年前

    我没有亲自检查过,但在我的书签中找到了: http://wiki.php.net/rfc/e-user-deprecated-warning

    编辑:好吧,这还不起作用-所以不要使用e用户,而是使用e用户注意:

    <?php
    class Foo
    {   
        public function __construct()
        {
            trigger_error('Use Bar instead', E_USER_NOTICE);
        }
    }
    
    $foo = new Foo()
    

    最终结果是:

    Notice: Use Bar instead in /home/unexist/projects/ingame/svn/foo.php on line 6
    
        5
  •  2
  •   Codebeef    16 年前

    如果函数是类的一部分,那么可以使用 trigger_error 在构造器中警告该拒绝。

    或者,如果函数在单个文件中,那么当文件包含在其他地方时,在文件顶部触发一个取消预测警告将显示错误。

    最后,您可以在任何不推荐使用的函数的第一行抛出错误。

        6
  •  2
  •   troelskn    16 年前

    您可以考虑编写一个脚本,它可以扫描您的代码库以使用此函数,然后生成一个有问题的代码报告,而不是对使用情况发出运行时警告。偶尔,试一下。

    如果使用版本控制系统,可以将脚本设置为提交挂钩。我可能会推荐一个post hook,它只在签入包含不推荐使用的函数的脚本时发送一封电子邮件,但是如果您真的想强制执行它,您可以使用pre hook完全阻止任何人签入它。