Функция не возвращает ничего при использовании переключателя

Если я верну array до SWITCH условие работает нормально, но если попытаться вернуть что-то после SWITCH условие (даже жестко закодированный массив) ничего не возвращает. И не идет ни в какую CASE, даже не DEFAULT, Даже печать или эхо не работает.

мой $e->getAwsErrorCode() функция возвращается InvalidSignatureException но это не входит в связанный случай выключателя.

Я проверил журнал ошибок и там ничего нет, ни ошибки, ни предупреждения не напечатаны на странице.

private function rekognition_error_catch($e)
{
$arr_error = array();
/*return [
'error_code' => 34,
'error_message' => 'Error'
];*/
switch ($e->getAwsErrorCode()) {
case 'InvalidParameterException':
$arr_error['error_code'] = 71;
$arr_error['error_message'] = $e->getAwsErrorMessage();
break;
case 'InvalidS3ObjectException':
$arr_error['error_code'] = 72;
$arr_error['error_message'] = $e->getAwsErrorMessage();
break;
case 'ImageTooLargeException':
$arr_error['error_code'] = 73;
$arr_error['error_message'] = $e->getAwsErrorMessage();
break;
case 'AccessDeniedException':
$arr_error['error_code'] = 74;
$arr_error['error_message'] = $e->getAwsErrorMessage();
break;
case 'InternalServerError':
$arr_error['error_code'] = 75;
$arr_error['error_message'] = $e->getAwsErrorMessage();
break;
case 'ThrottlingException':
$arr_error['error_code'] = 76;
$arr_error['error_message'] = $e->getAwsErrorMessage();
break;
case 'ProvisionedThroughputExceededException':
$arr_error['error_code'] = 77;
$arr_error['error_message'] = $e->getAwsErrorMessage();
break;
case 'InvalidImageFormatException':
$arr_error['error_code'] = 78;
$arr_error['error_message'] = $e->getAwsErrorMessage();
break;
case 'InvalidSignatureException':
$arr_error['error_code'] = 79;
$arr_error['error_message'] = $e->getAwsErrorMessage();
echo '1';
print_r($arr_error);
break;
default:
//throw new Exception($e->getAwsErrorMessage(),80);
$arr_error['error_code'] = 80;
$arr_error['error_message'] = $e->getAwsErrorMessage();
}
echo '2';
print_r($arr_error);
return [
'error_code' => 34,
'error_message' => 'Error'
];
}

0

Решение

Ваши дела установлены $arr_array, но никогда не возвращать его никуда, вы всегда возвращаете значение по умолчанию [ 'error_code' => 34, 'error_message' => 'Error' ]следовательно, вам нужно проверить, установлены ли значения в этом массиве, поэтому;

if (!empty($arr_error['error_code']))
{
return $arr_error;
}
return [
'error_code' => 34,
'error_message' => 'Error'
];

Выше проверяет, установлен ли код ошибки в $arr_error и если это так, будет использовать это, в противном случае, ваш по умолчанию 34 ошибка возвращается

Просто в качестве примечания, вы звоните $e->getAwsErrorMessage() очень много, хранение этого сделает немного проще, например;

$arr_error = array();
$err_message = $e->getAwsErrorCode();
switch ($err_message) {
case 'InvalidParameterException':
$arr_error['error_code'] = 71;
$arr_error['error_message'] = $err_message;
break;
/* Your other code, just using $err_message instead of $e->getAwsErrorCode()
This will save some overhead from the function calls */
}
-1

Другие решения

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

-2