2010-01-06 28 views
5

以下是此主题:How to handle functions deprecation in library?我想找到一种方法来跟踪对已弃用函数的所有调用,以便我可以确保在函数被删除之前全部替换它们。鉴于以下PHP方法跟踪使用标记为弃用的函数

/* 
    @deprecated - just use getBar() 
*/ 
function getFoo(){ 
    return getBar(); 
} 

function getBar(){ 
    return "bar"; 
} 

我想出了以下方法这样做,我正在寻找反馈。

function getFoo(){ 
    try{ 
     throw new Exception("Deprecated function used"); 
    } catch(Exception $e){ 
     //Log the Exception with stack trace 
     .... 
     // return value as normal 
     return getBar(); 
    } 
} 

回答

4

对于PHP的内部弃用函数,只需将E_STRICT添加到error_reporting即可。

对于用户级函数来提出有关不推荐函数的通知或警告,我建议花时间添加@deprecated注释的开发人员也会触发E_USER_DEPRECATED警告,例如,

function getFoo(){ 
    trigger_error(__FUNCTION__ . 'is deprecated', E_USER_DEPRECATED); 
    return getBar(); 
} 

我不知道是否有任何available QA tools的能自动检测,如果代码中包含已过时的方法调用。这些是你最好的选择。

如果您使用的TDD代码覆盖率为100%,则不需要担心删除弃用的方法或函数。您的自动化测试只会失败,您会知道去哪里寻找。

+0

传播在E_STRICT运行的福音+1 :) – 2010-01-06 16:57:35

+0

戈登,我喜欢你的解决方案,因为它让我觉得我不会滥用例外。我看到的一个缺点是,它并没有为程序员提供有问题的调用,就像堆栈跟踪一样,但只是调用已经完成。 – Scott 2010-01-06 18:08:28

+0

Scott:随意添加任何魔术常量来调整错误消息,只要您认为合适:http://us.php.net/manual/en/language.constants.predefined.php或包含来自'debug_backtrace( )' - 上面的例子是为了可读性故意缩短的。 – Gordon 2010-01-06 18:17:21

1

依靠实际调用的弃用函数是危险的 - 您将有100%的代码覆盖率以确保您不会错过任何内容。慢慢找到所有对不推荐使用的函数的调用并逐一替换它们是可以的,但对于完整的转换不够好。

我觉得File>Search in Files

在你的IDE是你最好的选择,因为周围有PHP没有好的重构工具,我知道的。

Afterthought:也许PhpXRef是解决方案。

+0

佩卡,这往往是采取的方法。但是,这种方法无法找到在文件搜索完成后创建的实例(也就是说不同的开发人员不会阅读文档)。上面的方法旨在提供另一种“联系”开发者的方式,但仍然依赖于开发者阅读他的错误日志。 – Scott 2010-01-06 16:57:06

+0

这两种方法的组合可能是最好的。 – 2010-01-06 17:22:21