我正在使用PHP开发我的第一个函数 - 它是一个调用cURL登录API的登录函数。到目前为止,这一切都运行良好,但我想添加一些错误检查,以便如果登录失败或成功,我可以为此分支。
我可以看到2种可能的错误类型:
如果没有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);
如果出现卷曲错误,请查看如何返回错误的建议,并检查调用该函数的调用页面上的响应。
答案 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类来创建自己的异常。