我如何才能优雅地逃脱错误条件?

时间:2011-01-14 作者:Scott B

我的插件将页面的执行冻结在调用以下函数的位置。

我有两个问题。。。

1) 如何重新编码函数,以便在出现错误时,插件不会停止页面加载,而是返回错误消息?

2) 我如何反馈可能的错误?它只是冻结,但没有输出错误。

function rseo_get_seo($check, $post){
 //return false;
    switch ($check)
    {
    case "h1": return rseo_doTheParse(\'h1\', $post);
    case "h2": return rseo_doTheParse(\'h2\', $post);
    case "h3": return rseo_doTheParse(\'h3\', $post);
    case "img-alt": return rseo_doTheParse(\'img-alt\', $post);
    }
}

function rseo_doTheParse($heading, $post)
{
    $content = $post->post_content;
    if($content=="") return false;
    $keyword = trim(strtolower(rseo_getKeyword($post)));
    @$dom = new DOMDocument;
    @$dom->loadHTML(strtolower($post->post_content));
    $xPath = new DOMXPath(@$dom);
    switch ($heading)
        {
        case "img-alt": return $xPath->evaluate(\'boolean(//img[contains(@alt, "\'.$keyword.\'")])\');
        default: return $xPath->evaluate(\'boolean(/html/body//\'.$heading.\'[contains(.,"\'.$keyword.\'")])\');
        }
}
这是我尝试用try-catch更改第二个函数,但在插件激活时出现了一个致命错误。。。

function rseo_doTheParse($heading, $post){
try { //I get a FATAL error here. unexpected \'{\'
    $content = $post->post_content;
    if($content=="") return false;
    $keyword = trim(strtolower(rseo_getKeyword($post)));
    @$dom = new DOMDocument;
    @$dom->loadHTML(strtolower($post->post_content));
    $xPath = new DOMXPath(@$dom);
    switch ($heading)
        {
        case "img-alt": return $xPath->evaluate(\'boolean(//img[contains(@alt, "\'.$keyword.\'")])\');
        default: return $xPath->evaluate(\'boolean(/html/body//\'.$heading.\'[contains(.,"\'.$keyword.\'")])\');
        }
    }
    catch (Exception $e)
    {
        echo \'Exception caught: \',  $e->getMessage(), "\\n";
    }
}

2 个回复
最合适的回答,由SO网友:Otto 整理而成

该行错误:

$xPath = new DOMXPath(@$dom);
应该是这样的:

$xPath = new DOMXPath($dom);

SO网友:blago

为了进行调试,还可以使用以下语法,而不是try/catch:

if (!$x) {
   throw new Exception(\'Division by zero.\');
}
else return 1/$x;
或者使用好的旧var\\u转储(x美元);这通常会告诉你足够的信息让你重新开始。

结束

相关推荐

Displaying oEmbed errors?

有时,通过oEmbed嵌入项目是不可能的,例如,当YouTube视频已禁用嵌入时。The oEmbed service will return a 401 Unauthorized, 并且不会转换代码。有没有办法通知用户这一点?当前的工作流是非直观的(至少对我来说),我更喜欢在WordPress页面上,或者更好的是,在编辑器中显示一条消息,说明对象无法嵌入。