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

时间:2013-08-21 06:28:45

标签: php business-logic

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'));

}

我可以将数组作为参数传递给errHandle函数。

显示错误: set_error_handler()期望参数(SimpleXMLElement :: errHandle)成为...中的有效回调。

整个意图是检查,如果迭代中有错误,则显示该数组以查看函数errHandle中的数组内容

3 个答案:

答案 0 :(得分:3)

您无法直接执行此操作,因为对用户定义的错误处理程序有严格的规则。 如果要定义错误处理程序,则可以依赖于它的上下文 - 该上下文将作为最后一个参数传递,并将包含当前作用域(即触发错误的作用域)。这是一个例子:

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);

您可以通过相应的密钥(即$xmlArray)从参数$errContext访问'xmlArray'。有关详细信息,请参阅manual page

答案 1 :(得分:1)

试试这个

set_error_handler(array($this, 'customErrorHandler'));

答案 2 :(得分:0)

对于自定义错误消息,我在下面找到了好文章,

http://mydons.com/how-to-create-error-messages-like-codeigniter-drupal-and-custom-type-with-php/