PHP函数 - 捕获错误或成功结果

时间:2017-12-04 21:38:07

标签: php

我正在使用PHP开发我的第一个函数 - 它是一个调用cURL登录API的登录函数。到目前为止,这一切都运行良好,但我想添加一些错误检查,以便如果登录失败或成功,我可以为此分支。

我可以看到2种可能的错误类型:

  1. cURL错误
  2. API登录错误
  3. 如果没有cURL错误,API将以JSON方式返回响应,以便成功登录:

    {
        "token": "6a2b4af445bb7e02a77891a380f7a47a57d3f99ff408ec57a62a",
        "layout": "Tasks",
        "errorCode": "0",
        "result": "OK"
    }
    

    这是登录失败的原因:

    {
        "errorMessage": "Invalid user account and/or password; please try again",
        "errorCode": "212"
    }
    

    因此应该很容易通过错误代码或结果值进行陷阱。如果存在cURL错误,则可能存在多种类型的错误。

    这是我目前的职能概要:

    function Login ($username, $password, $layout) {
    
        $curl = curl_init();
    
        // set curl options
    
        $response = curl_exec($curl);
        $err = curl_error($curl);
    
        curl_close($curl);
    
        if ($err) {
          echo "cURL Error #:" . $err;
        } else {
          return json_decode($response, true); 
        }
    
    }
    

    我通过以下方式致电:

    $ login =登录($ username,$ password,$ layout);

    如果出现卷曲错误,请查看如何返回错误的建议,并检查调用该函数的调用页面上的响应。

1 个答案:

答案 0 :(得分:0)

正如@ larwence-cherone在评论中所建议的那样,你应该抛出并捕获异常。

// note: made the method name lowercase, because uppercase usually indicates a class
function login ($username, $password, $layout) {

    $curl = curl_init();

    // set curl options   
    $response = curl_exec($curl);
    $err = curl_error($curl);

    curl_close($curl);

    if ($err) {
        throw new Exception($err);
    } else {
        // returns an associative array
        $result = json_decode($response, true);
        // the status was not OK or if we received an error code.
        // Check the API doc for a recommended way to do this
        if ($result['result'] !== 'OK' || $result['errorCode'] > 0) {
            $errorMessage = $result['errorMessage'];
            // no error message: return a genuine error
            if (!$errorMessage) {
                $errorMessage = 'An undefined error occurred';
            }
            throw new Exception($errorMessage);
        }
        // if no error occurred, return the API result as an
        return $result;
    }    
}

在try / catch块中调用该方法:

try {
    $login = login($username, $password, $layout);
    print_r($login);
} catch (Exception $error) {
    echo $error;
}

如果要对其进行优化,可以通过扩展SPL Exception类来创建自己的异常。