如何弃用PHP中的函数?

时间:2008-10-11 14:24:55

标签: php deprecated

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

现在,我们如何防止将来使用ibase_ *功能?

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

首选纯PHP的解决方案(不需要编译自定义版本的PHP)。

6 个答案:

答案 0 :(得分:42)

trigger_error()

function my_deprecated_function() {
    trigger_error("Deprecated function called.", E_USER_NOTICE);
    // do stuff.
}

答案 1 :(得分:20)

一般来说,您可以将方法标记为已弃用,以便向用户发出有关在将来版本中无法使用的代码的警告。我认为最好的方法是使用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

答案 2 :(得分:16)

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

答案 3 :(得分:6)

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

编辑:好的,这还不行 - 所以不要使用像E_USER_NOTICE那样的E_USER_DEPRECATED:

<?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

答案 4 :(得分:2)

如果您的函数是类的一部分,那么您可以在构造函数中使用trigger_error来警告弃用。

或者,如果函数位于单个文件中,则只要文件包含在其他位置,触发文件顶部的弃用警告就会显示错误。

最后,您可以将错误抛出到任何已弃用的函数的第一行。

答案 5 :(得分:2)

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

如果使用版本控制系统,则可以将脚本设置为commit-hook。我可能会推荐一个post-hook,只需发送一封电子邮件,当一个包含已弃用函数的脚本被签入时,但是如果你真的想要强制执行它,你可以有一个预挂钩完全阻止任何人检查它