Table of Contents
1. Three ways of PHP error handling
2. PHP exception handling [Key points]
Home Backend Development PHP Tutorial Detailed explanation of error handling and exception handling mechanisms in PHP

Detailed explanation of error handling and exception handling mechanisms in PHP

Apr 10, 2018 pm 03:43 PM
php deal with abnormal

The content of this article is a detailed explanation of the error handling and exception handling mechanisms in PHP. It has a certain reference value. Friends in need can refer to it.

Reprinted from: http://www. cnblogs.com/52php/p/5665495.html

When writing PHP programs, error handling is an important part. A program that lacks error detection code looks unprofessional and opens the door to security risks.

Example:


那么正确的写法应该如下:


##1

2

3

4


<?php
    $a = fopen(&#39;test.txt&#39;,&#39;r&#39;);
    //这里并没有对文件进行判断就打开了,如果文件不存在就会报错
?>
Copy after login


1

2

3

4

5

6

7


<?php
    if (file_exists(&#39;test.txt&#39;)) {
        $f = fopen(&#39;test.txt&#39;, &#39;r&#39;);
        // 使用完后关闭
        fclose($f);
    }
?>
Copy after login


1. Three ways of PHP error handling

A. Simple die() statement;

Equivalent to exit( );

example 1

2

3

45
6

7

if (!file_exists(&#39;aa.txt&#39;)) {
    die(&#39;文件不存在&#39;);
} else {
    // 执行操作
}
// 如果上面die()被触发,那么这里echo接不被执行
echo &#39;ok&#39;;
Copy after login


简洁写法:


1

2


file_exits(&#39;aaa.txt&#39;) or die(&#39;文件不存在&#39;);
echo &#39;ok&#39;;
Copy after login


B. Custom errors and error triggers

1. Error handler (custom errors, generally used for syntax error handling)

Create a custom error function (handler), which must be capable of processing at least two parameters (error_level and errormessage), but can accept up to five parameters (error_file, error_line, error_context)

Syntax :

function error_function($error_level, $error_message, $error_file, $error_line, $error_context)

// After creation, you need to rewrite set_error_handler(); function

set_error_handler('error_function', E_WARNING); // Here error_function corresponds to the custom handler name created above, and the second parameter is the error level using the custom error handler;

Error reporting level (Just know it)

These error reporting levels are different types of errors that the error handler is designed to handle:

ValueConstantDescription
2E_WARNING Non-fatal run-time error. Do not pause script execution.
8E_NOTICERun-time notification. Script discovery errors can occur, but they can also occur while the script is running normally.
256E_USER_ERRORFatal user-generated error. This is similar to E_ERROR set by the programmer using the PHP function trigger_error().
512E_USER_WARNINGNon-fatal user-generated warning. This is similar to the E_WARNING set by the programmer using the PHP function trigger_error().
1024E_USER_NOTICE User-generated notification. This is similar to E_NOTICE set by the programmer using the PHP function trigger_error().
4096E_RECOVERABLE_ERRORCatchable fatal error. Like E_ERROR, but can be caught by a user-defined handler. (See set_error_handler())
8191E_ALLAll errors and warnings except level E_STRICT. (In PHP 6.0, E_STRICT is part of E_ALL)

2、错误触发器(一般用于处理逻辑上的错误)

需求:比如要接收一个年龄,如果数字大于120,就认为是一个错误

传统方法:


1

2

3

4

5

6


<?php
if ($age > 120) {
    echo &#39;年龄错误&#39;;
    exit();
}
?>
Copy after login


Use triggers:


##1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18


<?php
if ($age > 120) {
    // trigger_error(&#39;错误信息&#39;[,&#39;错误等级&#39;]); 这里错误等级为可选项,用于定义该错误的级别
    // 用户定义的级别包含以下三种:E_USER_WARNING 、E_USER_ERROR 、E_USER_NOTICE
    trigger_error(&#39;年龄错误&#39;); // 这里是调用的系统默认的错误处理方式,我们也可以用自定义处理器
}
 
/**
 * 自定义处理器,与上面相同
 */
function myerror($error_level, $error_message) {
    echo &#39;error text&#39;;
}
 
//  同时需要改变系统默认的处理函数
set_error_handler(&#39;myerror&#39;, E_USER_WARNING); // 同上面,第一个参数为自定义函数的名称,第二个为错误级别【这里的错误级别通常为以下三种:E_USER_WARNING 、E_USER_ERROR 、E_USER_NOTICE】
// 现在再使用trigger_error就可以使用自定义的错误处理函数了
?>
Copy after login

Exercise questions:


##1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26


<?php
date_default_timezone_set(&#39;PRC&#39;);
function myerror($error_level, $error_message) {
    $info = "错误号:$error_level";
    $info .= "错误信息:$error_message";
    $info .= &#39;发生时间:&#39; . date(&#39;Y-m-d H:i:s&#39;);
    $filename = &#39;aa.txt&#39;;
    if (!$fp = fopen($filename, &#39;a&#39;)) {
        echo &#39;创建文件&#39; . $filename . &#39;失败&#39;;
    }
    if (is_writeable($filename)) {
        if (!fwrite($fp, $info)) {
            echo &#39;写入文件失败&#39;;
        } else {
            echo &#39;已成功记录错误信息&#39;;
        }
        fclose($fp);
    } else {
        echo &#39;文件&#39; . $filename . &#39;不可写&#39;;
    }
    exit();
}
 
set_error_handler(&#39;myerror&#39;, E_WARNING);
$fp = fopen(&#39;aaa.txt&#39;, &#39;r&#39;);
?>
Copy after login


C. Error log

By default, according to the error_log configuration in php.ini, PHP sends error records to the server's error recording system or file. Error records can be sent to a file or remote destination by using the error_log() function;

Syntax:

error_log(error[, type, destination, headers])

type The part generally uses 3, which means appending error information after the file without overwriting the original content. destination means the destination, that is, the stored file or remote destination

For example: error_log("$error_info",3," errors.txt");

2. PHP exception handling [Key points]

1. Basic syntax


1

2

3

4

5

6

7

8

9

10


<?php
try {
    // 可能出现错误或异常的代码
    //catch 捕获  Exception是PHP已定义好的异常类
} catch (Exception $e) {
    // 对异常处理,方法:
    //1、自己处理
    //2、不处理,可以再次抛出 throw new Exception(&#39;xxx&#39;);
}
?>
Copy after login


2. The handler should include:

  1. try - The function that uses exceptions should be located within the "try" code block. If no exception is triggered, the code continues execution as usual. But if an exception is triggered, an exception will be thrown;

  2. throw - This specifies how to trigger the exception. Each "throw" must correspond to at least one "catch";

  3. catch - The "catch" code block will catch the exception and create an object containing the exception information;

Let’s trigger an exception:


##1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22


<?php
/**
 * 创建可抛出一个异常的函数
 */
function checkNum($number) {
    if ($number > 1) {
        throw new Exception("Value must be 1 or below");
    }
 
    return true;
}
 
// 在 "try" 代码块中触发异常
try {
    checkNum(2);
    // 如果异常被抛出,那么下面一行代码将不会被输出
    echo &#39;If you see this, the number is 1 or below&#39;;
} catch (Exception $e) {
    // 捕获异常
    echo &#39;Message: &#39; . $e->getMessage();
}
?>
Copy after login


上面代码将获得类似这样一个错误:
Copy after login


1


Message: Value must be 1 or below
Copy after login


Explanation of example:

The above code throws an exception and catches it:

  1. Create a checkNum() function that checks whether a number is greater than 1 and, if so, throws an exception.

  2. Call the checkNum() function in the "try" code block.

  3. Exception in checkNum() function is thrown.

  4. The "catch" code block receives the exception and creates an object ($e) containing the exception information.

  5. Output the error message from this exception by calling $e->getMessage() from this exception object.

However, in order to follow the principle of "each throw must correspond to a catch", you can set up a top-level exception handler to handle missed errors.

The set_exception_handler() function can set a user-defined function that handles all uncaught exceptions.


##1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23


<?php
/**
 * 设置一个顶级异常处理器
 */
function myexception($e) {
    echo &#39;this is top exception&#39;;
}
 
// 修改默认的异常处理器
set_exception_handler("myexception");
try {
    $i = 5;
    if ($i < 10) {
        throw new Exception(&#39;$i must greater than 10&#39;);
    }
} catch (Exception $e) {
    // 处理异常
    echo $e->getMessage() . &#39;<br/>&#39;;
 
    // 不处理异常,继续抛出
    throw new Exception(&#39;errorinfo&#39;); // 也可以用throw $e 保留原错误信息;
}
?>
Copy after login


Create a custom exception class


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15


<?php
class customException extends Exception {
    public function errorMessage() {
        $errorMsg = &#39;Error on line &#39; . $this->getLine() . &#39; in &#39; . $this->getFile() . &#39;: <b>&#39; . $this->getMessage() . &#39;</b> is not a valid E-Mail address&#39;;
        return $errorMsg;
    }
}
 
// 使用
try {
    throw new customException(&#39;error message&#39;);
} catch (customException $e) {
    echo $e->errorMessage();
}
?>
Copy after login


You can use multiple catches to return error messages under different circumstances


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15


<?php
try {
    $i = 5;
    if ($i > 0) {
        throw new customException(&#39;error message&#39;); // 使用自定义异常类处理
    }
    if ($i < -10) {
        throw new Exception(&#39;error2&#39;); // 使用系统默认异常处理
    }
} catch (customException $e) {
    echo $e->getMessage();
} catch (Exception $e1) {
    echo $e1->getMessage();
}
?>
Copy after login


异常的规则

  • 需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。

  • 每个try或throw代码块必须至少拥有一个对应的 catch 代码块。

  • 使用多个 catch 代码块可以捕获不同种类的异常。

  • 可以在try代码内的catch 代码块中再次抛出(re-thrown)异常。

简而言之:如果抛出了异常,就必须捕获它。

相关推荐:

PHP中错误处理的一些方法

PHP异常处理和错误处理方法分享

PHP异常处理器的自定义

The above is the detailed content of Detailed explanation of error handling and exception handling mechanisms in PHP. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1670
14
PHP Tutorial
1273
29
C# Tutorial
1256
24
PHP: A Key Language for Web Development PHP: A Key Language for Web Development Apr 13, 2025 am 12:08 AM

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

PHP vs. Python: Understanding the Differences PHP vs. Python: Understanding the Differences Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHP is suitable for web development, with simple syntax and high execution efficiency. 2. Python is suitable for data science and machine learning, with concise syntax and rich libraries.

PHP and Python: Comparing Two Popular Programming Languages PHP and Python: Comparing Two Popular Programming Languages Apr 14, 2025 am 12:13 AM

PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.

PHP in Action: Real-World Examples and Applications PHP in Action: Real-World Examples and Applications Apr 14, 2025 am 12:19 AM

PHP is widely used in e-commerce, content management systems and API development. 1) E-commerce: used for shopping cart function and payment processing. 2) Content management system: used for dynamic content generation and user management. 3) API development: used for RESTful API development and API security. Through performance optimization and best practices, the efficiency and maintainability of PHP applications are improved.

The Enduring Relevance of PHP: Is It Still Alive? The Enduring Relevance of PHP: Is It Still Alive? Apr 14, 2025 am 12:12 AM

PHP is still dynamic and still occupies an important position in the field of modern programming. 1) PHP's simplicity and powerful community support make it widely used in web development; 2) Its flexibility and stability make it outstanding in handling web forms, database operations and file processing; 3) PHP is constantly evolving and optimizing, suitable for beginners and experienced developers.

PHP and Python: Different Paradigms Explained PHP and Python: Different Paradigms Explained Apr 18, 2025 am 12:26 AM

PHP is mainly procedural programming, but also supports object-oriented programming (OOP); Python supports a variety of paradigms, including OOP, functional and procedural programming. PHP is suitable for web development, and Python is suitable for a variety of applications such as data analysis and machine learning.

PHP vs. Other Languages: A Comparison PHP vs. Other Languages: A Comparison Apr 13, 2025 am 12:19 AM

PHP is suitable for web development, especially in rapid development and processing dynamic content, but is not good at data science and enterprise-level applications. Compared with Python, PHP has more advantages in web development, but is not as good as Python in the field of data science; compared with Java, PHP performs worse in enterprise-level applications, but is more flexible in web development; compared with JavaScript, PHP is more concise in back-end development, but is not as good as JavaScript in front-end development.

PHP and Python: Code Examples and Comparison PHP and Python: Code Examples and Comparison Apr 15, 2025 am 12:07 AM

PHP and Python have their own advantages and disadvantages, and the choice depends on project needs and personal preferences. 1.PHP is suitable for rapid development and maintenance of large-scale web applications. 2. Python dominates the field of data science and machine learning.

See all articles