1

我正在开发一个 WordPress 插件,它返回特定 Forrest 用户的关注者数量。

如果与 API 服务器通信时出现错误或任何其他问题,希望函数优雅地返回 0。

这是功能:

/**
 * Get Forrst followers.
 *
 * @param string $forrstID The username of the Forrst member
 * @return int. Number of Forrst Followers
 */
function ass_get_forrst($forrstID) {
    $json = wp_remote_get("http://forrst.com/api/v2/users/info?username=".$forrstID);

    if(is_wp_error($json))
        return false;

    $forrstData = json_decode($json['body'], true);

    return intval($forrstData['resp']['followers']);
} 

如果出现错误,我在函数中有一个块来返回 false 但是似乎必须跳过这一部分,因为有时我仍然会遇到“致命错误” IE 超出最大执行时间。

如果出现错误,是否有更好的方法可以重写此函数以返回“0”。也许是 Try/Catch 块?

我是否if(is_wp_error($json)) return false;在功能的错误部分?

4

2 回答 2

1

注册一个关闭函数:

function returnzero() {
        $error = error_get_last();
        if($error &&  ['type'] == E_ERROR){
            echo 0;
        }
    }
register_shutdown_function('returnzero');

请注意,您可能希望关闭此页面上的错误报告,使用类似:

error_reporting(E_ALL & ~ E_ERROR);
于 2012-11-22T19:43:35.397 回答
1

我不了解 wordpress 模型,但听起来您正在使用的两个函数之一正在引发异常。在这种情况下,只有 Try/Catch 块可以根据需要顺利返回 cero

正在if(is_wp_error($json))检查的(我猜)是针对一些以前由 wordpress 检测到的“已知”错误。

您使用“通用” try/catch 块运行:

function ass_get_forrst($forrstID) {
    try {
        $json = wp_remote_get("http://forrst.com/api/v2/users/info?username=".$forrstID);

        if(is_wp_error($json))
            return false;

        $forrstData = json_decode($json['body'], true);

        return intval($forrstData['resp']['followers']);
    } catch (Exception $e) {
            return false;      // as above

    }
} 
于 2012-11-22T19:48:34.057 回答