38

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

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

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

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

4

6 回答 6

48

触发错误()

function my_deprecated_function() {
    trigger_error("Deprecated function called.", E_USER_NOTICE);
    // do stuff.
}
于 2008-10-11T14:34:58.700 回答
39

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

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

    return $this;
}

phpdoc@deprecated很重要,因为许多 IDE(如PHPStorm)会识别它并在您尝试使用它时删除方法名称,因此您会注意到在实际运行代码之前已弃用它。

它或多或少看起来像这样:

jetbrains 弃用删除线

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

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

于 2017-07-27T10:26:27.587 回答
17

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

于 2008-10-11T15:02:27.990 回答
6

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

编辑:好的,这还不行——所以不要使用 E_USER_DEPRECATED,而是使用 E_USER_NOTICE 之类的东西:

<?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
于 2008-10-11T14:30:31.517 回答
2

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

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

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

于 2008-10-11T14:35:27.513 回答
2

您可以考虑编写一个脚本,而不是在使用时发出运行时警告,该脚本可以扫描您的代码库以使用此函数,然后生成违规代码的报告。时不时地跑一遍。

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

于 2008-10-11T15:28:50.213 回答