写代码原则:
1、对于mysql或者redis等其他以扩展形式接入的一定 basemodel 处要用捕获异常,可以捕获错误并不至于脚本直接终止 - 比如mysql的column not found 或者data tool long或者invalid number for datetime
2、对于数组下标一定以empty校验以防止出现undefined offerset直接终止脚本
3、
PHP常见错误:
1、调用function参数错误
array_merge([1,2,3],''); -- Warning: array_merge(): Expected parameter 2 to be an array, string given
2、类不存在
Fatal error: Uncaught Error: Class 'test' not found
3、变量未定义
PHP Notice: Undefined variable
4、数组无匹配下标
PHP Notice: Undefined index: abc
5、数据库入库错误
column not found
data too long for name
Invalid datetime format: 1292 Incorrect datetime value: '111' for column 'update_time' at row 1
常用的捕获错误方法:
1、try catch捕获数据库错误
try { $TalentModelObj->update($talentInfo,array(['id','=',$talentId])); return array('retcode'=>StatusCode::$SUCCESS,'data'=>$talentId,'msg'=>'编辑候选人信息成功'); } catch (Throwable $th) { return array('retcode'=>StatusCode::$ERROR,'data'=>$th,'msg'=>'编辑失败,错误信息:'.json_encode($th)); }
2、注册错误回调函数捕获错误
// 设定报错级别为全部 error_reporting(E_ALL); // set_error_handler — 设置用户自定义的错误处理函数 set_error_handler([__CLASS__, 'appError']); // set_exception_handler — 设置用户自定义的异常处理函数 set_exception_handler([__CLASS__, 'appException']); // register_shutdown_function — 注册一个会在php中止时执行的函数,脚本执行完成或者 exit() 后被调用 register_shutdown_function([__CLASS__, 'appShutdown']);
1、调用方法参数错误 - 可以用try catch捕获到
function e($a){ return $a; } try { $a = e(); } catch (Throwable $th) { print_r($th); }
2、直接输出未定义变量 - 脚本会异常终止 - 只能用 register_shutdown_function 注册函数回调记录异常信息
// 无法捕获异常
try { echo $c; } catch (Throwable $th) { print_r($th); }
3、数据库错误(列未定义、字段过长等)都可以用try catch捕获错误并返回
4、数组无下标会导致运行终止,只能用 shutdown 回调捕获错误
// 无法捕获错误
try { $a = array(123); echo $a['abc']; } catch (Throwable $th) { print_r($th); }
5、数组转int不会抛出异常,但是转字符串会
1、判定数字用:
is_numeric