Error Handling and Exception
The default error handling in PHP is very simple.An error message with filename, line number and a message describing the error is sent to the browser.
PHP has different error handling methods:
- Simple "die()" statements
- Custom errors and error triggers
- Error reporting
Using the die() function
<?php
if(!file_exists(""a.txt)){
die("File not found");
}else{
$file = fopen("a.txt", "r");
}
?>
Creating a Custom Error Handler
Creating a custom error handler is quite simple.We simply create a special function that can be called when an error occurs in PHP.
The function must be able to handle a minimun of 2 parameters(error level and message) but can accept up to 5 parameters(optionally: file, line-number, and the error context)
error_function(error_level, error_message, error_file, error_line, error_context);
error_level: required.Specifies the error report level for the user-defined error.Must be a value number.
error_message: required.Specifies the error message for the user-defined error.
error_file: optional.Specifies the filename in which the error occurred.
error_line: optional.Specifies the line number in which the error occurred.
error_context: optional.Specifies an array containing every variable, and their values, in use the error occurred
error_levels:
2 E_WARNING Nonn-fatal run-time errors.Execution of the script is not halted
8 E_NOTICE Run-time notices.The script found something that might be an error, but could also happen when running a script normally
256 E_USER_ERROR Fatal user-generated error.This is like an E_ERROR set by the programmer using the PHP function trigger_error()
512 E_USER_WARNING Non-fatal user-generated warning.This is like an E_WARNING set by the programmer using the PHP function trigger_error()
1024 E_USER_NOTICE User-generated notice.This is like an E_NOTICE set by the programmer using the PHP function trigger_error()
4096 E_RECOVERABLE_ERROR Catchable fatal error.This is like an E_ERROR but can be caught by a user define handle
8191 E_ALL All the errors and warnings
<?php
function customError($errno, $errstr){
echo "<b>Error:</b>[$errno] $errstr<br>";
echo "Ending script";
die();
}
?>
The default error handler for PHP is the built in error handler.We are going to make the function above the default error handler for the duration of the script.
set_error_handler("customError");
<?php
function customError($errno, $errStr){
echo "<b>Error:</b>[$errno] $errstr<br>";
}
set_error_handler("cutomError");
echo($test); //Error: [8] Undefined variable: test
?>
In a script where users can input data it is useful to trigger errors when an illegal input occurs.In PHP, this is done by the trigger_error() function.
<?php
$test = 2;
if($test > 1){
trigger_error("Value must be 1 or below");// Notice: Value must be 1 or below
}
?>
An error type can be triggered anywhere you wish in a script, and by adding a second parameter, you can specify what error level is triggered.
Possible error types:
- E_USER_ERROR Fatal user-generated run-time error.Errors that can not be recovered from.Execution of the script is halted
- E_USER_WARNING Non-fatal user-generated run-time warning.Execution of the script is not halted
- E_USER_NOTICE Default.User-generated run-time notice.The script found something that might be an error, but could also happen when running a script normally
Error Logging
By default, PHP sends an error log to the server's logging system or a file, depending on how the error_log configuration is set in the php.ini file.By using the error_log() function you can send error logs to a specified or a remote destination.
<?php
//error handler function
function customError($errno, $errstr){
echo "<b>Error:</b> [$errno] $errstr</br>";
echo "Webmaster has been notified";
error_log("Error: [$errno] $errstr", 1, "xx@xxx.com", "From: webmaster@xx.com");
}
set_error_handler("customError", E_USER_WARNING);
$test = 2;
if($test > 1){
trigger_error("Value must be 1 or below", E_USER_WARNING);
}
?>
Exceptions are used to change the normal flow of a script if a specified error occurs.
PHP has different error handling methods:
- Basic use of Exception
- Creating a custom exception handler
- Multiple exceptions
- Re-throwing an exception
- Setting a top level exception handler
Basic Use of Exceptions
<?php
function checkNum($number){
if($number > 1){
throw new Exception("Value must be 1 or below");
}
return true;
}
checkNum(2);
?>
Try, throw and catch
Proper exception code shoule include:
Try--A fucntion using an exception should be in a "try" block.If the exception does not trigger, the code will continue as normal.However if the exception triggers, an exception is "thrown"
Throw--This is how you trigger an exception.Each "throw" must have at least one "catch"
Catch--A "catch" block retrieves an exception and creates an object containing the exception information
<?php
function checkNum($number){
if($number > 1){
throw new Exception("Value must be 1 or below");
}
return true;
}
try{
checkNum(2);
echo 'If you see this, the number is 1 or below';
}
catch(Exception $e){
echo 'Message: ' .$e->getMessage();
}
?>
Creating a Custom Exception Class
To create a custom exception handler you must create a special class with functions that can be called when an exception occurs in PHP.The class must be an extension of the exception class.
The custom exception class inherits the properties from PHP's exception class and you can ad customm functions to it.
<?php
class customException extends Exception{
public function errorMessage(){
$errorMsg = 'Error on line ' .$this->getLine().' in ' .$this->getFile(). ':<b>' .$this->getMessage(). '</b> is not a valid E-Mail address' ;
return $errorMsg;
}
}
$email = "xx@xx.....com";
try{
if(filter_var($email, FILTER_VALIDATE_EMAIL) === false){
throw new customException($email);
}
}
catch(customException $e){
echo $e->errorMessage();
}
?>
<?php
class customException extends Exception{
public function errorMessage(){
$errorMsg = 'Error on line ' .$this->getLine(). ' in ' .$this->getFile() . ': <b>' .$this->getMessage().'</b> is not a valid Email address'.
return $errorMsg;
}
}
$email = "xxx@xx.com";
try{
if(filter_var($email, FILTER_VALIDATE_EMAIL) === false){
throw new customException($email);
}
if(strpos($email, "example") !== false){
throw new Exception("$email is an example e-mail");
}
}
catch(customException $e){
echo $e -> errorMessage();
}
catch(Exception $e){
echo $e ->getMessage();
}
?>
<?php
class customException extends Exception{
public function errorMessage{
$errorMsg =$this->getMessage().' is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "xx@xx.com";
try{
try{
if(strpos($email, "example") !== false)
throw new Exception($email);
}
}
catch(Exception $e){
throw new customException($email);
}
}
catche(customException $e){
echo $e->errorMessage();
}
?>
<?php
function myException($exception){
echo "<b>Exception:</b>" .$exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occured');
?>
Rules for exceptions
- Code may be surrounded in a try block, to help catch potential exceptions
- Each try block or "throw" must have at least one corresponding catch block
- Multiple catch blocks can be used to catch different classed of exceptions
- Exceptions can be thrown in a catch block within a try block
Error Handling and Exception的更多相关文章
- TIJ——Chapter Twelve:Error Handling with Exception
Exception guidelines Use exceptions to: Handle problems at the appropriate level.(Avoid catching exc ...
- setjmp()、longjmp() Linux Exception Handling/Error Handling、no-local goto
目录 . 应用场景 . Use Case Code Analysis . 和setjmp.longjmp有关的glibc and eglibc 2.5, 2.7, 2.13 - Buffer Over ...
- Error Handling
Use Exceptions Rather Than Return Codes Back in the distant past there were many languages that didn ...
- Clean Code–Chapter 7 Error Handling
Error handling is important, but if it obscures logic, it's wrong. Use Exceptions Rather Than Return ...
- beam 的异常处理 Error Handling Elements in Apache Beam Pipelines
Error Handling Elements in Apache Beam Pipelines Vallery LanceyFollow Mar 15 I have noticed a defici ...
- Fortify漏洞之Portability Flaw: File Separator 和 Poor Error Handling: Return Inside Finally
继续对Fortify的漏洞进行总结,本篇主要针对 Portability Flaw: File Separator 和 Poor Error Handling: Return Inside Fina ...
- Error handling in Swift does not involve stack unwinding. What does it mean?
Stack unwinding is just the process of navigating up the stack looking for the handler. Wikipedia su ...
- WCF Error Handling
https://docs.microsoft.com/en-us/dotnet/framework/wcf/wcf-error-handling The errors encountered by a ...
- ASP.NET Error Handling
https://docs.microsoft.com/en-us/aspnet/web-forms/overview/getting-started/getting-started-with-aspn ...
随机推荐
- web标准常见问题整理
1.超链接访问过后hover样式就不出现的问题 2.FF下如何使连续长字段自动换行 3.ff下为什么父容器的高度不能自适应 4. IE6的双倍边距BUG 5. IE6下绝对定位的容器内文本无法正常选择 ...
- 集成 Union Pay - 银联支付
作者感言 前面已经把WeChat SDK的支付, AliPay SDK搞得七七八八了, 接下来就是银联支付的Union Pay SDK.最后:如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, ...
- iOS app性能优化的那些事
iPhone上面的应用一直都是以流畅的操作体验而著称,但是由于之前开发人员把注意力更多的放在开发功能上面,比较少去考虑性能的问题,可能这其中涉及到objective-c,c++跟lua,优化起来相对 ...
- UserAgent:通过浏览器获取用户浏览器等信息
User Agent的含义 User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本.CPU 类型.浏览器及版本.浏览器渲染引擎.浏 ...
- Struts2配置拦截器,struts2加载常量时的搜索顺序
1:struts2加载常量时的搜索顺序 1.Struts-default.xml 2.Struts-plugin.xml 3.Struts.xml 4.Struts-properties(自己创建的) ...
- ArangoDB介绍——未知架构和底层原理
ArangoDB介绍 ArangoDB是一个开源NoSQL数据库,官网:https://www.ArangoDB.org/ArangoDB支持灵活的数据模型,比如文档Document.图Graph以及 ...
- centos 6.5 64位编译 apache2.4
apache 2.4的安装和 apache2.2的安装有所不同 首先进入 http://apr.apache.org/download.cgi 下载 apr 和 apr-util 两个软件包 yum ...
- 计算excel列的名字
#include <iostream> using namespace std; int main() { unsigned int column; cin>> ...
- 都是以父元素的width为参照物的
本文依赖于一个基础却又容易混淆的css知识点:当margin/padding取形式为百分比的值时,无论是left/right,还是top/bottom,都是以父元素的width为参照物的!也许你会说, ...
- [转]jQuery Pagination Ajax分页插件中文详解
在做项目时需要用到在前端页面中需要实现分页显示的功能,类似于博客园下面的分页导航.从网上找了几个,觉得下面这个使用起来非常简单,也很方便.特在这里记录一下. 以下为文章原文. 中文项目地址:http: ...