追踪标记为废弃的函数的使用

5

根据这个帖子:如何处理库中的函数弃用? 我想找到一种方法来跟踪所有对被弃用函数的调用,以确保在函数被移除之前替换它们。给定以下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();
    }
}
2个回答

4

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

对于用户自定义函数来说,如果要引发有关已弃用函数的Notice或Warning,我建议添加@deprecated注释的开发人员也会触发一个E_USER_DEPRECATED警告,例如:

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

我不知道任何可用的QA工具是否可以自动检测代码中是否包含弃用的方法调用。但这些工具是你最好的选择。
如果您使用TDD并且代码覆盖率为100%,则无需担心删除弃用的方法或函数。您的自动化测试将简单地失败,并且您将知道在哪里查找问题。

Gordon,我喜欢你的解决方案,因为它让我感觉不像是滥用异常。我看到一个缺点是它没有提供程序员调用出错的位置,就像堆栈跟踪那样,只是告诉我们调用已经发生了。 - Scott
Scott:随意添加任何魔术常量以根据需要调整错误消息:http://us.php.net/manual/en/language.constants.predefined.php 或包含来自debug_backtrace()的数据-上面的示例故意保持简短以提高可读性。 - Gordon

1
依靠废弃函数实际调用是很危险的——你需要百分之百的代码覆盖率以确保没有遗漏。逐个查找所有对废弃函数的调用并逐一替换它们的做法虽然可以逐渐完成过渡,但不足以实现完整的转换。
我认为在你的IDE中使用“文件” > “在文件中搜索” 是最好的选择,因为我所知道的PHP没有好的重构工具。
事后想想:也许PhpXRef是解决方案。

Pekka,这通常是采取的方法。然而,这种方法无法找到在文件搜索完成后创建的实例。(比如另一个开发人员没有阅读文档)。上述方法旨在提供另一种“联系”开发人员的方式,但仍然依赖于开发人员阅读其错误日志。 - Scott
两种方法的结合可能是最好的。 - Pekka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接