如何在php中抛出数组异常

时间:2012-01-11 18:34:20

标签: php exception-handling

所以我有一条错误消息被抛入一个文件

$error_message = "Error received for " . $service . ": " . $_r['status'] . "\n" . "Message received: " . $_r['errors'];
throw new My_Exception($error_message);

并在另一个文件中

try {
    //blah blah
} catch( My_Exception $e ) { 
    var_export($e->getMessage());
}

问题是,$ _r ['errors']是一个ARRAY,它得到$ e-> getMessage()只是将它打印为“Array”。如何修改此代码以访问阵列?

4 个答案:

答案 0 :(得分:14)

问题在于您尝试将数组与字符串合并。它总会这样结束。

也许您应该将异常传递给数组,以便以后可以使用它?

<?php
class myException extends Exception {

    private $params;

    public function setParams(array $params) {
        $this->params = $params;
    }

    public function getParams() {
        return $this->params;
    }
}

// later it can be used like this:
try {
    $exception = new myException('Error!');
    $exception->setParams(array('status' => 1, 'errors' => array());

    throw $exception;
}
catch (myException $e) {
    // ...
}
?>

答案 1 :(得分:9)

要将类似数组的复杂数据结构转换为字符串(例如,错误消息),您可以使用print_r­Docs并将其第二个参数设置为TRUE

... ": " . print_r($_r['status'], TRUE) . "\n" ...

答案 2 :(得分:0)

所以你的示例代码有点不好,但假设

$_r['errors'] = array(
    'Message 1',
    'Message 2',
    'Message 3',
    'Message 4',
    'Message 5',
);

然后

$error_message = "Error received for " . $service . ": \n" . impolode("\n", $_r['errors']) . "\n" . "Message received: " . $_r['errors'];
throw new My_Exception($error_message);

关键是获取您的错误消息数组并将它们与换行符(或其他)连接起来

但我同意你可能使用错误框架错误的评论。你能发布你想要做的事吗?

一般的经验法则是您为每个唯一事件抛出异常。你不收集一堆错误信息,然后立即将它们全部丢弃。

答案 3 :(得分:0)

我们可以使用json格式

   throw new Exception(json_encode(['type'=>'error','isExit'=>'true','title'=>'SystemConfigError']));

并在陷阱中

        catch (Exception $error)
    {
        var_dump(json_decode($error->getMessage(),JSON_OBJECT_AS_ARRAY));
    }