doumu6941 2013-08-21 06:28
浏览 62
已采纳

将参数传递给set_error_handler PHP中调用的函数

function errHandle($errNo, $errStr, $errFile, $errLine, $xmlArray) {
    $msg = "$errStr in $errFile on line $errLine";

    if ($errNo == E_NOTICE || $errNo == E_WARNING) {
        throw new ErrorException($msg, $errNo);
    } else {
        echo $msg;
        echo '<pre>';
    print_r($xmlArray);
    }
}

foreach($returnValues as $xmlArray){

....
....
set_error_handler(array($xmlArray, 'errHandle'));

}

Can i pass the array as parameter to errHandle function.

it is showing the Error: set_error_handler() expects the argument (SimpleXMLElement::errHandle) to be a valid callback in ...

Whole intention is to check, if there is a error in the iteration, then display that array to see the array contents in the function errHandle

  • 写回答

3条回答 默认 最新

  • douzhe9927 2013-08-21 06:37
    关注

    You can not do that directly, since there are strict rules for user-defined handler of errors. If you are defining error handler, you can rely on context from it - that context will be passed as the last parameter and will contain current scope (i.e. scope, from which error was triggered). Here's an example:

    function errHandle($errNo, $errStr, $errFile, $errLine, $errContext) {
        $msg = "$errStr in $errFile on line $errLine";
    
        if ($errNo == E_NOTICE || $errNo == E_WARNING) {
            throw new ErrorException($msg, $errNo);
        } else {
            echo $msg;
            echo '<pre>';
        print_r($errContext);
        }
    }
    
    $xmlArray=['foo'=>'bar'];
    set_error_handler('errHandle');
    
    trigger_error('test', E_USER_WARNING);
    

    you will be able to access $xmlArray from your parameter $errContext via corresponding key (i.e. 'xmlArray'). For more information see manual page.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?