【问题标题】:Pass Parameter to the function called in set_error_handler PHP将参数传递给 set_error_handler PHP 中调用的函数
【发布时间】:2013-08-21 06:28:44
【问题描述】:
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中的数组内容

【问题讨论】:

  • 您的意图很明确,但是请注意set_error_handler 是针对:php.net/set_error_handler - 您首先注册错误处理函数,然后执行您认为有错误的代码。

标签: php business-logic


【解决方案1】:

您不能直接这样做,因为用户定义的错误处理程序有严格的规则。 如果您正在定义错误处理程序,您可以依赖它的上下文 - 该上下文将作为最后一个参数传递,并将包含当前范围(即范围,从哪个触发错误)。这是一个例子:

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

【讨论】:

    【解决方案2】:

    试试这个

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

    【讨论】:

      猜你喜欢
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      相关资源
      最近更新 更多