Как бросить исключение массива в php - PullRequest
8 голосов
/ 11 января 2012

Итак, у меня есть сообщение об ошибке, которое выдается в одном файле

$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'] является массивом, и он получает $ e-> getMessage () просто печатает его как "массив".Как я могу изменить этот код для доступа к массиву?

Ответы [ 3 ]

14 голосов
/ 11 января 2012

Проблема в том, что вы пытаетесь объединить массив со строкой.Это всегда заканчивается следующим образом.

Может быть, вам следует передать исключение массиву, чтобы вы могли позже использовать его?

9 голосов
/ 11 января 2012

Чтобы преобразовать сложную структуру данных, например массив, в строку (например, для сообщений об ошибках), вы можете использовать print_r Документы и установка его второго параметра на TRUE:

... ": " . print_r($_r['status'], TRUE) . "\n" ...
0 голосов
/ 11 января 2012

так что ваш пример кода довольно плох, но предполагается, что

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

Ключ берет ваш массив сообщений об ошибках и объединяет их все вместе с символами новой строки (иличто угодно)

Но я согласен с замечанием, что вы, возможно, неправильно используете структуру исключений.Можете ли вы опубликовать то, что вы пытаетесь сделать?

Общее правило заключается в том, что вы бросаете исключение для каждого уникального события.Вы не собираете кучу сообщений об ошибках, а затем выбрасываете их все сразу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...