2012-11-22 30 views
1

我正在研究一个WordPress插件,该插件可为特定的Forrest用户返回跟随者计数。如何在调用PHP函数时防止显示错误

希望函数能正常返回0,如果在与API服务器通信时出现错误或其他问题。

下面是函数:

/** 
* 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

是的,正确的。如果与服务器通信出现错误,例如将返回致命错误而不是仅仅返回。 – Jason

回答

1

我不知道WordPress的模式,但听起来像你正在使用的两个函数之一是抛出一个异常。在这种情况下,只要你想

什么正在检查(我猜)是在一些“知道”设置错误之前由WordPress的检测只是一个try/catch块能够顺利返回CERO。

你一个 “通用” 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 

    } 
} 
+0

谢谢路易斯,我会试试这个方法。 – Jason

1

注册一个关机功能:

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

请注意,您可能要关闭错误报告这个网页上,使用类似:

error_reporting(E_ALL & ~ E_ERROR); 
+0

谢谢阿萨德,我是否需要从上面的函数中调用这个函数,或者它会被WP调用吗? – Jason

+0

@Jason只需将它添加到应该返回零而不是错误的PHP脚本的末尾即可。 –

+0

不好意思,但是使用register_shutdown_function执行的回调函数无法返回到正常的执行流程,所以即使在这种情况下执行也会结束。这是真的,它会回声0; //或其他任何东西,但其他的wordpress运行将会丢失。 –

相关问题