如何在php中抛出数组异常


How to throw an array exception in php

所以我在一个文件中抛出了一条错误消息

$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"。如何修改此代码以访问数组?

问题是您试图将数组与字符串合并。结局总是这样。

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

<?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) {
    // ...
}
?>

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

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

我们可以使用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));
    }

所以您的示例代码有点糟糕,但假设

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

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

但我有点同意这样的评论,即您可能错误地使用了Exception框架。你能发布你想做的事情吗?

一般的经验法则是,您为每个唯一的事件抛出一个异常。你不会收集一堆错误信息,然后一次把它们全部扔掉。