使用开关盒时函数不返回任何内容

时间:2018-07-05 11:14:19

标签: php exception exception-handling aws-sdk amazon-rekognition

如果我在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'
        ];
    }

2 个答案:

答案 0 :(得分:-1)

您的案例设置了$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 :(得分:-2)

如果当时切换条件不返回任何值,则必须将默认条件置于切换条件中。默认值是在其他任何条件都不匹配时执行的条件。