我正在开发一个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;
?
答案 0 :(得分:1)
注册关机功能:
function returnzero() {
$error = error_get_last();
if($error && ['type'] == E_ERROR){
echo 0;
}
}
register_shutdown_function('returnzero');
请注意,您可能希望使用以下内容关闭此页面上的错误报告:
error_reporting(E_ALL & ~ E_ERROR);
答案 1 :(得分: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
}
}