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();
    }
}
4

2 回答 2

4

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

对于 userland 函数提出关于已弃用函数的通知或警告,我建议花时间添加@deprecated注释的开发人员也触发E_USER_DEPRECATED警告,例如

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

我不知道是否有任何可用的 QA 工具可以自动检测代码是否包含已弃用的方法调用。不过,这些是你最好的选择。

如果您使用具有 100% 代码覆盖率的 TDD,则无需担心删除已弃用的方法或函数。您的自动化测试将简单地失败,您将知道在哪里寻找。

于 2010-01-06T16:52:39.707 回答
1

依赖实际调用的已弃用函数是危险的——您将拥有 100% 的代码覆盖率,以确保您不会错过任何内容。慢慢找到所有对已弃用函数的调用并一一替换它们是可以的,但对于完全过渡来说还不够好。

我认为File>Search in Files

在你的 IDE 中是你最好的选择,因为据我所知,没有好的 PHP 重构工具。

事后思考:也许PhpXRef是解决方案。

于 2010-01-06T16:50:13.997 回答