在我工作的团队中,我们有一个使用PHP的ibase_ *函数遍历代码的旧代码库来与数据库进行通信。我们为它创建了一个包装器,除了调用原始函数之外还会做其他事情,并且我在整个代码中进行了大规模搜索 - 替换,以确保使用包装器。如何在PHP中弃用一个函数?
现在,我们如何防止将来使用ibase_ *函数?
最好,我想还是让他们提供,但要抛出一个通知或警告的时候才使用。
在纯PHP中的溶液(不需要编译PHP的定制版本)是优选的。
在我工作的团队中,我们有一个使用PHP的ibase_ *函数遍历代码的旧代码库来与数据库进行通信。我们为它创建了一个包装器,除了调用原始函数之外还会做其他事情,并且我在整个代码中进行了大规模搜索 - 替换,以确保使用包装器。如何在PHP中弃用一个函数?
现在,我们如何防止将来使用ibase_ *函数?
最好,我想还是让他们提供,但要抛出一个通知或警告的时候才使用。
在纯PHP中的溶液(不需要编译PHP的定制版本)是优选的。
如果我理解正确,那么当使用内置的PHP函数时,您希望触发错误?在这种情况下,请看Override Function函数。
我没有通过自己检查,但发现这在我的书签: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
function my_deprecated_function() {
trigger_error("Deprecated function called.", E_USER_NOTICE);
// do stuff.
}
这不是我的功能,但是PHP的内置像ibase_query例如ibase_ *功能。 – 2008-10-11 15:47:13
您可以考虑使用[E_USER_DEPRECATED(http://php.net/manual/en/migration53.deprecated.php)对于PHP 5.3.x及更高版本 – emont01 2014-12-05 20:28:19
如果你的函数是类的一部分,那么你可以在构造函数中使用trigger_error来警告弃用。
可选地,如果函数是在单个文件中,则触发在该文件的顶部的弃用警告将显示每当文件别处所含的误差。
最后,你可以扔在任一废弃的函数的第一行中的错误。
这不是我的功能,但是PHP的内置像ibase_ *功能例如,ibase_query。 – 2008-10-11 15:47:55
而是提高对使用一个运行时警告的,你可以考虑写一个脚本,可以扫描使用此功能的代码库,然后产生问题的代码的报告。有一段时间,运行它。
如果您使用版本控制系统,您可以将脚本设置为提交挂钩。我可能会推荐一个post-hook,它只是发送一封电子邮件,当一个包含不推荐使用的函数的脚本被签入时,但如果你真的想强制执行它,你可以预先挂钩完全阻止任何人检查它。
一般来说,你可以标记的方法为过时给你的用户代码,也不会在以后的版本警告。我认为最好的方法是使用trigger_error以及一些phpdoc。因为像PHPStorm许多IDE承认它和罢工的方法名,如果你尝试使用它,所以你会注意到在实际运行您的代码之前弃用
/**
* @deprecated
*
* @return $this
*/
public function oldMethod()
{
trigger_error('Method ' . __METHOD__ . ' is deprecated', E_USER_DEPRECATED);
return $this;
}
的@deprecated
PHPDoc的是很重要的。
它看起来或多或少是这样的:
除了可以确保用户在运行时触发正确的错误得到一个警告PHPDoc的。只要确保你使用正确的常数(即E_USER_DEPRECATED
)。
E_DEPRECATED
由PHP内部使用,因此您应该使用而不是正在使用它。更多信息here。
谢谢,根据您发布的链接,我发现了我需要的东西,在这里: http://no.php.net/manual/en/function.override-function.php#50821 – 2008-10-11 17:15:21