php异常处理机制
php错误处理和php异常处理机制
php错误处理
当我们开发程序时,有时候程序出现了问题,我们就可以用以下几种办法找出错误。
开发阶段:开发时输出所有的错误报告,有利于我们进行程序调试
运行阶段:我们不要让程序输出任何一种错误报告(不能让用户看到(包括懂技术, 不懂技术的人))
将错误报告写入日志中
一、指定错误报告 error_reporting = E_LL
二、关闭错误输出 display_errors = Off
三、开启错误日志功能 log_errors = On
1. 默认如果不指定错误日志位置,则默认写WEB服务器的日志中
2. 为error_log选项指定 一个文件名(可写)
3. 写入到操作系统日志中error_log=syslog
以下代码示例
<span style="font-family:SimSun;font-size:14px;"><?php // error_reporting(E_ALL);/// ini_set("display_errors", "off");// ini_set("error_log", "syslog");// ini_set("MAX_FILEUPLOAD", 200000000);// echo ini_get("upload_max_filesize");// error_log("this is a error message!!!!"); getType($var); //注意 getType(); //警告 getTye(); //错误 会终止程序运行 echo "###########################<br>"; ?></span>
当然php还提供了函数error_get_last()来获得错误信息
函数定义和用法
小例子:
<span style="font-family:SimSun;font-size:14px;"><?php echo $test; print_r(error_get_last()); ?>输出:Array ( [type] => 8 [message] => Undefined variable: test [file] => D:\www\test.php [line] => 2 )</span>
php5.4以后也提供了PHP预定义变量$php_errormsg
$php_errormsg — 前一个错误信息
$php_errormsg 变量包含由 PHP 生成的最新错误信息。这个变量只在错误发生的作用域内可用,并且要求track_errors 配置项是开启的(默认是关闭的)。例子:
<?php @strpos();echo $php_errormsg;?>
会输出:
Wrong parameter count for strpos()
所以这样我们也很方便了。。。这样是不是对调试程序和排查错误的时候很有帮助呢?
这些错误报告级别是错误处理程序旨在处理的错误的不同的类型:
值 | 常量 | 描述 |
---|---|---|
2 | E_WARNING | 非致命的 run-time 错误。不暂停脚本执行。 |
8 | E_NOTICE |
Run-time 通知。 脚本发现可能有错误发生,但也可能在脚本正常运行时发生。 |
256 | E_USER_ERROR | 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。 |
512 | E_USER_WARNING | 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。 |
1024 | E_USER_NOTICE | 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。 |
4096 | E_RECOVERABLE_ERROR | 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler()) |
8191 | E_ALL |
所有错误和警告,除级别 E_STRICT 以外。 (在 PHP 6.0,E_STRICT 是 E_ALL 的一部分) |
php异常处理机制
定义:
异常处理: 意外,是在程序运行过程中发生的意料这外的事,使用异常改变脚本正常流程
语法格式:
<span style="font-family:SimSun;font-size:14px;">try{ //...}catch(Exception $e){ //...}</span>
PHP中try{}catch{}是异常处理.
将要执行的代码放入TRY块中,如果这些代码执行过程中某一条语句发生异常,则程序直接跳转到CATCH块中,由$e收集错误信息和显示.
PHP中try{}catch{}语句
为了进一步处理异常,我们需要使用PHP中try{}catch{}----包括Try语句和至少一个的catch语句。任何调用 可能抛出异常的方法的代码都应该使用try语句。Catch语句用来处理可能抛出的异常。例子:
我写一段代码:
自己定义一个异常类
作用:就是写一个或多个方法解决当发生这个异常时的处理方式
1. 自己定义异常类,必须是Exception(内置类)的子类, 可以查看PHP手册里面Exception(内置类)的使用方法
2. Exception类中的只有构造方法和toString()可以重写, 其它都final
<span style="font-family:SimSun;font-size:14px;"><?phpclass OpenFileException extends Exception { //继承PHP的内置类 function __construct($message = null, $code = 0){ parent::__construct($message, $code); echo "wwwwwwwwwwwwwww<br>"; } function open(){ touch("tmp.txt"); $file=fopen("tmp.txt", "r"); return $file; }}?></span>
1. 如果try中代码没有问题,则将try中代码执行完后就到catch后执行
2. 如果try中代码有异常发生,则抛出一个异常对象(使用throw),抛出给了catch中的参数, 则在try中代码就不会再继续执行下去 直接跳转到catch中去执行, catch中执行完成, 再继续向下执行
注意: 提示发生了什么异常,这不是主要我们要做事,需要在catch中解决这个异常, 如果解决不了,则出去给用户在下面代码中,如果我没有这个TMP.TXT文件的话,就会抛出异常了。
如果有异常,我们调用OPEN方法就可以解决这个异常了。
<span style="font-family:SimSun;font-size:14px;"><?phptry { $file=fopen("tmp.txt", "r"); // 尝试读取这个文件 if(!$file) throw new OpenFileException("文件打开失败"); //如果文件不存在则抛出异常 }catch(OpenFileException $e){ //$e =new Exception(); echo $e->getMessage()."<br>"; //getMessage() 是PHP里面内置的方法,可以直接调用 $file=$e->open(); }</span>
下面将代码进行整理以及多个异常处理方法:
<span style="font-family:SimSun;font-size:14px;"><?php /* * 异常处理: 意外,是在程序运行过程中发生的意料这外的事,使用异常改变脚本正常流程 * * PHP5中的一个新的重要特性 * * if(){ * * }else{ * * } * * try { * * }catch(异常对象){ * * } * * 1. 如果try中代码没有问题,则将try中代码执行完后就到catch后执行 * 2. 如果try中代码有异常发生,则抛出一个异常对象(使用throw),抛出给了catch中的参数, 则在try中代码就不会再继续执行下去 * 直接跳转到catch中去执行, catch中执行完成, 再继续向下执行 * * * 注意: 提示发生了什么异常,这不是主要我们要做事,需要在catch中解决这个异常, 如果解决不了,则出去给用户 * * 二、自己定义一个异常类 * * 作用:就是写一个或多个方法解决当发生这个异常时的处理方式 * * 1. 自己定义异常类,必须是Exception(内置类)的子类, * 2. Exception类中的只有构造方法和toString()可以重写, 其它都final * * 三、处理多个异常 * * * 自己定义功能类时如果在方法中抛出异常 * * */class OpenFileException extends Exception { function __construct($message = null, $code = 0){ parent::__construct($message, $code); echo "wwwwwwwwwwwwwww<br>"; } function open(){ touch("tmp.txt"); $file=fopen("tmp.txt", "r"); return $file; }}class DemoException extends Exception { function pro(){ echo "处理demo发生的异常<br>"; }}class TestException extends Exception { function pro(){ echo "这里处理test发生的异常<br>"; }}class HelloException extends Exception {}class MyClass { function openfile(){ [email protected]("tmp.txt", "r"); if(!$file) throw new OpenFileException("文件打开失败"); } function demo($num=0){ if($num==1) throw new DemoException("演示出异常"); } function test($num=0){ if($num==1) throw new TestException("测试出错"); } function fun($num=0){ if($num==1) throw new HelloException("###########"); }}try{ echo "11111111111111<br>"; $my=new MyClass(); $my->openfile(); $my->demo(0); $my->test(0); $my->fun(1); echo "22222222222222222<br>";}catch(OpenFileException $e){ //$e =new Exception(); echo $e->getMessage()."<br>"; $file=$e->open();}catch(DemoException $e){ echo $e->getMessage()."<br>"; $e->pro();}catch(TestException $e){ echo $e->getMessage()."<br>"; $e->pro();}catch(Exception $e){ echo $e->getMessage()."<br>";} var_dump($file); echo "444444444444444444444<br>";</span>

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

如果您是一位经验丰富的 PHP 开发人员,您可能会感觉您已经在那里并且已经完成了。您已经开发了大量的应用程序,调试了数百万行代码,并调整了一堆脚本来实现操作

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。
