2008-10-11 73 views
24

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

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

最好,我想还是让他们提供,但要抛出一个通知或警告的时候才使用。

在纯PHP中的溶液(不需要编译PHP的定制版本)是优选的。

回答

12

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

+0

谢谢,根据您发布的链接,我发现了我需要的东西,在这里: http://no.php.net/manual/en/function.override-function.php#50821 – 2008-10-11 17:15:21

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 
36

trigger_error()

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

这不是我的功能,但是PHP的内置像ibase_query例如ibase_ *功能。 – 2008-10-11 15:47:13

+9

您可以考虑使用[E_USER_DEPRECATED(http://php.net/manual/en/migration53.deprecated.php)对于PHP 5.3.x及更高版本 – emont01 2014-12-05 20:28:19

2

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

可选地,如果函数是在单个文件中,则触发在该文件的顶部的弃用警告将显示每当文件别处所含的误差。

最后,你可以扔在任一废弃的函数的第一行中的错误。

+0

这不是我的功能,但是PHP的内置像ibase_ *功能例如,ibase_query。 – 2008-10-11 15:47:55

1

而是提高对使用一个运行时警告的,你可以考虑写一个脚本,可以扫描使用此功能的代码库,然后产生问题的代码的报告。有一段时间,运行它。

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

8

一般来说,你可以标记的方法为过时给你的用户代码,也不会在以后的版本警告。我认为最好的方法是使用trigger_error以及一些phpdoc。因为像PHPStorm许多IDE承认它和罢工的方法名,如果你尝试使用它,所以你会注意到在实际运行您的代码之前弃用

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

    return $this; 
} 

@deprecated PHPDoc的是很重要的。

它看起来或多或少是这样的:

jetbrains deprecated strikethrough

除了可以确保用户在运行时触发正确的错误得到一个警告PHPDoc的。只要确保你使用正确的常数(即E_USER_DEPRECATED)。

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

相关问题