如何弃用PHP中的函数?

Mil*_*kov 30 php deprecated

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

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

我希望仍然可以使用它们,但是当它被使用时,它会发出通知或警告.

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

nic*_*ckf 43

trigger_error()

function my_deprecated_function() {
    trigger_error("Deprecated function called.", E_USER_NOTICE);
    // do stuff.
}
Run Code Online (Sandbox Code Playgroud)

  • 对于PHP 5.3.x及更高版本,您可以考虑使用[E_USER_DEPRECATED](http://php.net/manual/en/migration53.deprecated.php) (13认同)

Fra*_*ula 21

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

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

    return $this;
}
Run Code Online (Sandbox Code Playgroud)

@deprecated因为像许多IDE PHPDoc的重要PHPStorm承认它和罢工的方法名,如果你尝试使用它,所以你会注意到在实际运行您的代码之前弃用.

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

jetbrains弃用了删除线

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

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


小智 16

如果我理解正确,你想在使用内置PHP函数时触发错误?在这种情况下,请查看" 覆盖功能"功能.


une*_*ist 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()
Run Code Online (Sandbox Code Playgroud)

这将最终得到:

Notice: Use Bar instead in /home/unexist/projects/ingame/svn/foo.php on line 6
Run Code Online (Sandbox Code Playgroud)