PHP异常处理
php知识点

php知识点一、PHP基础知识PHP是一种脚本语言,常用于Web开发,但也可以用于命令行界面(CLI)脚本编写。
PHP是一种开源的、免费的、跨平台的语言,可以在各种操作系统上运行,包括Windows、Linux、Unix等。
PHP的语法类似于C语言,但更加简单易懂,因此学习起来相对较容易。
1. 数据类型PHP支持多种数据类型,包括整型、浮点型、布尔型、字符串型、数组、对象等。
其中,整型和浮点型可以进行算术运算,布尔型只有true和false两个值,字符串型可以使用单引号或双引号来表示,数组是一种用于存储多个值的数据结构,对象是一种面向对象编程的概念。
2. 变量变量是存储值的容器,可以存储各种数据类型的值。
在PHP中,变量必须以$符号开头,后面跟着变量名。
变量名可以包含字母、数字和下划线,但不能以数字开头。
变量的值可以通过赋值语句进行修改。
3. 运算符PHP支持多种运算符,包括算术运算符、比较运算符、逻辑运算符等。
算术运算符用于数学计算,比较运算符用于比较两个值的大小关系,逻辑运算符用于组合多个条件,形成复杂的逻辑表达式。
4. 控制流程语句PHP支持多种控制流程语句,包括if语句、switch语句、while语句、for语句等。
这些语句可以根据不同的条件执行不同的代码块,实现程序的控制流程。
二、PHP高级知识PHP不仅仅是一种简单易学的语言,还有很多高级的特性和技术,可以用于构建复杂的Web应用程序。
以下是一些PHP高级知识点:1. 面向对象编程PHP支持面向对象编程,可以使用类和对象来组织代码。
面向对象编程具有很多优点,包括代码复用、封装性、可维护性等。
2. 异常处理PHP提供了异常处理机制,可以在程序发生异常时进行捕获和处理。
异常处理可以避免程序崩溃,提高代码的健壮性。
3. 文件操作PHP可以读写文件,操作文件系统。
通过文件操作,可以实现数据的持久化存储和读取。
4. 数据库操作PHP可以连接和操作各种数据库,包括MySQL、Oracle、SQL Server等。
什么是异常处理异常处理的特点

什么是异常处理异常处理的特点异常处理是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况,那么你对异常处理了解多少呢?以下是由店铺整理关于什么是异常处理的内容,希望大家喜欢!异常处理的概述各种编程语言在处理异常方面具有非常显著的不同点(错误检测与异常处理区别在于:错误检测是在正常的程序流中,处理不可预见问题的代码,例如一个调用操作未能成功结束)。
某些编程语言有这样的函数:当输入存在非法数据时不能被安全地调用,或者返回值不能与异常进行有效的区别。
例如,C语言中的atoi函数(ASCII串到整数的转换)在输入非法时可以返回0。
在这种情况下编程者需要另外进行错误检测(可能通过某些辅助全局变量如C的errno),或进行输入检验(如通过正则表达式),或者共同使用这两种方法。
通过异常处理,我们可以对用户在程序中的非法输入进行控制和提示,以防程序崩溃。
从进程的视角,硬件中断相当于可恢复异常,虽然中断一般与程序流本身无关。
从子程序编程者的视角,异常是很有用的一种机制,用于通知外界该子程序不能正常执行。
如输入的数据无效(例如除数是0),或所需资源不可用(例如文件丢失)。
如果系统没有异常机制,则编程者需要用返回值来标示发生了哪些错误。
异常处理的特点1.在应用程序遇到异常情况(如被零除情况或内存不足警告)时,就会产生异常。
2.发生异常时,控制流立即跳转到关联的异常处理程序(如果存在)。
3.如果给定异常没有异常处理程序,则程序将停止执行,并显示一条错误信息。
4.可能导致异常的操作通过 try 关键字来执行。
5.异常处理程序是在异常发生时执行的代码块。
在C# 中,catch关键字用于定义异常处理程序。
6.程序可以使用 throw 关键字显式地引发异常。
7.异常对象包含有关错误的详细信息,其中包括调用堆栈的状态以及有关错误的文本说明。
8.即使引发了异常,finally 块中的代码也会执行,从而使程序可以释放资源。
PHP应用程序的错误处理方法

PHP应用程序的错误处理方法1. 引言PHP是一种开发网站的编程语言,广泛用于构建应用程序和动态网站。
在开发任何应用程序时,出现错误是不可避免的。
因此,了解PHP应用程序的错误处理方法对于开发人员至关重要。
2. 错误处理方法在PHP中,可以使用以下方法处理应用程序中的错误。
2.1. 错误报告默认情况下,PHP会向客户端显示错误报告。
这些报告可以帮助开发人员识别和修复错误,但对于终端用户来说可能过于技术性。
可以使用以下方法关闭错误报告。
在PHP代码中,使用以下指令关闭错误报告:error_reporting(0);在PHP配置文件中,将error_reporting设置为0:error_reporting=02.2. 错误日志错误日志是记录PHP应用程序中的错误的文件。
通过错误日志,开发人员可以查看应用程序中的错误信息并进行排除。
在PHP代码中,可以使用以下指令将错误日志写入文件:ini_set('error_log', '/path/to/error.log');在PHP配置文件中,可以设置以下参数将错误日志写入文件:error_log = /path/to/error.log2.3. 异常处理异常是在运行时发生的错误。
使用异常处理可以在异常发生时执行特定操作。
在PHP中,可以使用以下语法抛出异常:throw new Exception('Error message');可以使用try-catch语句捕获和处理异常:try {// 代码块} catch (Exception $e) {echo 'Caught exception: ', $e->getMessage(), "\n";}2.4. 自定义错误处理方法可以使用set_error_handler()函数自定义PHP应用程序的错误处理程序。
通过自定义错误处理程序,可以在出现错误时采取特定操作。
thinkphp6:自定义异常处理使统一返回json数据(thinkphp6.0.5php。。。

thinkphp6:⾃定义异常处理使统⼀返回json数据(thinkphp6.0.5php。
⼀,创建统⼀返回json格式数据的result类app/business/Result/Result.php<?phpnamespace app\business\Result;class Result {//successstatic public function Success($data) {$rs = ['code'=>0,'msg'=>"success",'data'=>$data,];return json($rs);}//errorstatic public function Error($code,$msg) {$rs = ['code'=>$code,'msg'=>$msg,'data'=>"",];return json($rs);}}说明:刘宏缔的架构森林是⼀个专注架构的博客,地址:对应的源码可以访问这⾥获取:说明:作者:刘宏缔邮箱: 371125307@⼆,测试效果:正常返回数据:1,在controller中调⽤:<?phpnamespace app\adm\controller;use app\BaseController;use app\business\Result\Result;class Index extends BaseController{//hello,demopublic function hello($name = 'ThinkPHP6'){//return 'hello,' . $name;$data = array("name"=>$name,"str"=>"hello,".$name."!");return Result::Success($data);}}2,测试,访问:http://127.0.0.1:81/adm/index/hello?name=laoliu返回:三,创建⾃定义的异常类,主要处理404/500等情况app/business/Exception/MyException.php<?phpnamespace app\business\Exception;use think\exception\Handle;use think\exception\HttpException;use think\exception\ValidateException;use think\Response;use Throwable;use ErrorException;use Exception;use InvalidArgumentException;use ParseError;//use PDOException;use think\db\exception\DataNotFoundException;use think\db\exception\ModelNotFoundException;use think\exception\ClassNotFoundException;use think\exception\HttpResponseException;use think\exception\RouteNotFoundException;use TypeError;use app\business\Result\Result;class MyException extends Handle{public function render($request, Throwable $e): Response{//如果处于调试模式if (env('app_debug')){//return Result::Error(1,$e->getMessage().$e->getTraceAsString());return parent::render($request, $e);}// 参数验证错误if ($e instanceof ValidateException) {return Result::Error(422,$e->getError());}// 请求404异常 , 不返回错误页⾯if (($e instanceof ClassNotFoundException || $e instanceof RouteNotFoundException) || ($e instanceof HttpException && $e->getStatusCode() == 404)) {return Result::Error(404,'当前请求资源不存在,请稍后再试');}//请求500异常, 不返回错误页⾯//$e instanceof PDOException ||if ($e instanceof Exception || $e instanceof HttpException || $e instanceof InvalidArgumentException || $e instanceof ErrorException || $e instanceof ParseError || $e instanceof TypeError) { $this->reportException($request, $e);return Result::Error(500,'系统异常,请稍后再试');}//其他错误$this->reportException($request, $e);return Result::Error(1,"应⽤发⽣错误");}//记录exception到⽇志private function reportException($request, Throwable $e):void {$errorStr = "url:".$request->host().$request->url()."\n";$errorStr .= "code:".$e->getCode()."\n";$errorStr .= "file:".$e->getFile()."\n";$errorStr .= "line:".$e->getLine()."\n";$errorStr .= "message:".$e->getMessage()."\n";$errorStr .= $e->getTraceAsString();trace($errorStr, 'error');}}四,指定使⽤⾃定义异常类:1,app/provider.php指定'think\exception\Handle'的路径为⾃定义的MyException类的路径<?phpuse app\ExceptionHandle;use app\Request;// 容器Provider定义⽂件return ['think\Request' => Request::class,//'think\exception\Handle' => ExceptionHandle::class,'think\exception\Handle' => '\\app\\business\\Exception\\MyException'];2,在⼀个controller的⽅法中加⼊除0代码,供测试⽤: app/adm/controller/Index.php<?phpnamespace app\adm\controller;use app\BaseController;use app\business\Result\Result;class Index extends BaseController{public function index(){$div = 0;$a = 100 / $div;$data = array("name"=>"liuhongdi","age"=>20);return Result::Success($data);}public function hello($name = 'ThinkPHP6'){//return 'hello,' . $name;$data = array("name"=>$name,"str"=>"hello,".$name."!");return Result::Success($data);}}五,测试效果1,访问⼀个不存在的url,例如:http://127.0.0.1:81/abcdef返回:2,访问包含除0错误的url:http://127.0.0.1:81/adm/返回:六,查看thinkphp的版本liuhongdi@ku:/data/php/mytp$ php think versionv6.0.5七,查看php的版本:liuhongdi@ku:/data/logs/phplogs/tlog/202012$ php --versionPHP 7.4.9 (cli) (built: Oct 26 2020 15:17:14) ( NTS )Copyright (c) The PHP GroupZend Engine v3.4.0, Copyright (c) Zend Technologieswith Zend OPcache v7.4.9, Copyright (c), by Zend Technologies。
零点起飞学PHP之错误处理

7.1.2 环境错误
环境错误通常是指PHP运行的环境和相关服务关联的 问题,例如PHP程序需要使用的相关模块没有被正确 加载、服务器没有启动、数据库配置错误等等。由于 我们使用的是集成开发环境,因此这些问题出现的概 率是比较小的,集成环境的制作者已经替我们做了大 量的工作。但是如果是初次自己搭建一个环境来运行, 通常情况下会非常的吃力。环境错误所涉及的编程语 言之外的知识比较多,因此本书我们不做详细讲解。
2.使用error_reporting() 函数
【示例7-8】演示不使用error_reporting函数设置时候将0作 为除数,未定义的变量作为被除数后的运行结果。 从运行结果我可以看出有一条变量为定义的提示和一条0作 为除数的警告。下面我就通过设置错误报告来使警告不再 提示,代码如下: 01 <?php 02 error_reporting(E_ALL&~E_WARNING); 03 echo '$a/0='.$a/0; 04 ?> 从运行结果可以看到,警告信息已经不再显示,而提示信 息还在显示,这就演示了使用error_reporting函数可以使得 PHP的错误报告非常灵活。
第7章 错误处理
错误在编程的过程中通常是无法避免的。我们在前面 的学习过程中也碰到了多处错误。PHP系统可以帮助 我们就提示以及修正一些错误。我们也可以自己定义 一些抛出和处理错误方法。本章将详细讲解错误发送 的原因和种类以及处理这些错误的方法。
7.1 错误发生的原因
错误发生的原因有多种,他们按照特点可以分为大的 四类,分别是语法错误、环境错误、逻辑错误和运行 时错误。本节就来介绍这些错误。
256
512 1024 2048 4096
错误处理及调试.

6.1 错误处理概述
• 6.1.1 常见的错误类型
在PHP中,错误用于指出语法、环境或编程问题。根据错误出现
在编程过程中的不同环节,大致可以分为四类,具体如下: 1、语法错误 语法错误是指编写的代码不符合PHP的编写规范。语法错误最常 见,也最容易修复,例如,遗漏了一个分号,就会显示错误信息。这 类错误会阻止PHP脚本执行,通常发生在程序开发时,可以通过错误 报告进行修复,再重新6.2.1 显示错误报告
3、die()函数
die()函数可以用来自定义输出错误信息,常用于业务逻辑的错误 显示。 注意:使用函数控制的方式只对当前脚本有效,而配置php.ini文件对 所有脚本都有效。
6.1 错误处理概述
• 6.1.1 常见的错误类型
2、运行错误 运行错误一般不会阻止PHP脚本的执行,但是会阻止脚本做希望 它做的任何事情,例如,在调用header()函数前如果有字符输出, PHP通常会显示一条错误信息。虽然PHP脚本继续执行,但header()
函数并没有执行成功。
3、逻辑错误 逻辑错误是最让人头疼的,不但不会阻止PHP脚本的执行,也不 会显示出错误信息。例如,在if语句中判断两个变量的值是否相等。 如果错把比较运算符“==”写成赋值运算符“=”就是一种逻辑错 误,很难被发现。
显示除E_NOTICE之外的所有级别错误,第1行表示显示错误报告。
6.2 如何处理错误
• 6.2.1 显示错误报告
2、error_reporting()和ini_set()函数 通过PHP语言提供的error_reporting()和ini_set()函数来实现显示错 误报告,代码如下所示: <?php error_reporting(E_ALL & ~E_NOTICE); ini_set('display_errors',1); ?> 上述代码中,ini_set()函数用来设置错误信息是否显示,error_report ing()函数用于设置错误级别。第2行表示显示除E_NOTICE之外的所有级 别错误,第3行表示显示错误信息。
php期末考试题及答案

php期末考试题及答案一、选择题(每题2分,共20分)1. PHP是一种:A. 网页设计语言B. 服务器端脚本语言C. 数据库查询语言D. 客户端脚本语言答案:B2. 下列哪个是PHP的内置超全局数组?A. $_POSTB. $_SESSIONC. $_REQUESTD. $GLOBALS答案:D3. 在PHP中,以下哪个函数可以用来获取当前脚本的文件名?A. __FILE__B. __LINE__C. __FUNCTION__D. __CLASS__答案:A4. 下列哪个PHP函数可以用来将字符串编码为URL?A. urlencode()B. urldecode()C. base64_encode()D. base64_decode()答案:A5. 在PHP中,以下哪个是正确的数组定义方式?A. $array = "apple", "banana", "cherry";B. $array = array("apple", "banana", "cherry");C. $array = ["apple", "banana", "cherry"];D. 以上都是答案:D6. PHP中,哪个函数可以用来获取客户端的IP地址?A. get_client_ip()B. get_ip_address()C. $_SERVER['REMOTE_ADDR']D. client_ip()答案:C7. 下列哪个是PHP的魔术方法?A. __toString()B. toString()C. __to_string()D. to_string()答案:A8. 在PHP中,哪个函数可以用来计算数组中元素的数量?A. array_count()B. count()C. array_size()D. size()答案:B9. 下列哪个是PHP的文件上传函数?A. file_upload()B. upload_file()C. move_uploaded_file()D. upload()答案:C10. PHP中,哪个函数可以用来将字符串分割成数组?A. explode()B. split()C. str_split()D. A和C答案:D二、简答题(每题5分,共30分)1. 请简述PHP中变量的作用域。
PHP如何抛出异常处理错误

PHP如何抛出异常处理错误⾸先要知道什么是PHP异常?异常(Exception)⽤于在指定的错误发⽣时改变脚本的正常流程。
PHP 5 提供了⼀种新的⾯向对象的错误处理⽅法。
异常处理⽤于在指定的错误(异常)情况发⽣时改变脚本的正常流程。
这种情况称为异常。
当异常被触发时,通常会发⽣:当前代码状态被保存代码执⾏被切换到预定义的异常处理器函数根据情况,处理器也许会从保存的代码状态重新开始执⾏代码,终⽌脚本执⾏,或从代码中另外的位置继续执⾏脚本我们将展⽰不同的错误处理⽅法:异常的基本使⽤创建⾃定义的异常处理器多个异常重新抛出异常设置顶层异常处理器异常的基本使⽤当异常被抛出时,其后的代码不会继续执⾏,PHP 会尝试查找匹配的 “catch” 代码块。
如果异常没有被捕获,⽽且⼜没⽤使⽤ set_exception_handler() 作相应的处理的话,那么将发⽣⼀个严重的错误(致命错误),并且输出 “Uncaught Exception” (未捕获异常)的错误消息。
让我们尝试抛出⼀个异常,同时不去捕获它:复制代码代码如下:<?php//create function with an exceptionfunctioncheckNum($number) {if($number>1) {throw new Exception(”Value must be 1 or below”);} return true;}//triggerexceptioncheckNum(2);>上⾯的代码会获得类似这样的⼀个错误:Fatal error: Uncaught exception ‘Exception' with message ‘Value must be 1 or below' in C:\webfolder\test.php:6 Stack trace: #0 C:\webfolder\test.php(12): checkNum(28) #1 {main} thrown in C:\webfolder\test.php on line 6Try, throw 和 catch要避免上⾯例⼦出现的错误,我们需要创建适当的代码来处理异常。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用户输入的信息错误try{用户输入的信息的代码}catch(Exception ex){处理异常的代码}finally{不管有没有异常,都得执行的代码}Exception 可由下面的异常代替检查算数溢出OverflowException除数为零DivideByZeroException索引越界IndexOutRangeExceptiontry{//你的操作}catch(Exception ex){//如果try不通,要执行的操作,ex中有异常信息,你可以随意处理}finally{//不管前面结果如何,都要执行的操作}***************************************************************************什么是异常?异常(Exception)用于在指定的错误发生时改变脚本的正常流程。
PHP 5 提供了一种新的面向对象的错误处理方法。
异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。
这种情况称为异常。
当异常被触发时,通常会发生:当前代码状态被保存代码执行被切换到预定义的异常处理器函数根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本我们将展示不同的错误处理方法:异常的基本使用创建自定义的异常处理器多个异常重新抛出异常设置顶层异常处理器异常的基本使用当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 "catch" 代码块。
如果异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出 "Uncaught Exception" (未捕获异常)的错误消息。
让我们尝试抛出一个异常,同时不去捕获它:<?php//create function with an exceptionfunction checkNum($number){if($number>1){throw new Exception("Value must be 1 or below");}return true;}//trigger exceptioncheckNum(2);?>上面的代码会获得类似这样的一个错误:Fatal error: Uncaught exception 'Exception'with message 'Value must be 1 or below' in C:\webfolder\test.php:6Stack trace: #0 C:\webfolder\test.php(12):checkNum(28) #1 {main} thrown in C:\webfolder\test.php on line 6Try, throw 和 catch要避免上面例子出现的错误,我们需要创建适当的代码来处理异常。
处理程序应当包括:Try - 使用异常的函数应该位于 "try" 代码块内。
如果没有触发异常,则代码将照常继续执行。
但是如果异常被触发,会抛出一个异常。
Throw - 这里规定如何触发异常。
每一个 "throw" 必须对应至少一个 "catch"Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象让我们触发一个异常:<?php//创建可抛出一个异常的函数function checkNum($number){if($number>1){throw new Exception("Value must be 1 or below");}return true;}//在 "try" 代码块中触发异常try{checkNum(2);//If the exception is thrown, this text will not be shownecho 'If you see this, the number is 1 or below';}//捕获异常catch(Exception $e){echo 'Message: ' .$e->getMessage();}?>上面代码将获得类似这样一个错误:Message: Value must be 1 or below例子解释:上面的代码抛出了一个异常,并捕获了它:创建 checkNum() 函数。
它检测数字是否大于 1。
如果是,则抛出一个异常。
在 "try" 代码块中调用 checkNum() 函数。
checkNum() 函数中的异常被抛出"catch" 代码块接收到该异常,并创建一个包含异常信息的对象 ($e)。
通过从这个 exception 对象调用 $e->getMessage(),输出来自该异常的错误消息不过,为了遵循“每个 throw 必须对应一个 catch”的原则,可以设置一个顶层的异常处理器来处理漏掉的错误。
创建一个自定义的 Exception 类创建自定义的异常处理程序非常简单。
我们简单地创建了一个专门的类,当 PHP 中发生异常时,可调用其函数。
该类必须是 exception 类的一个扩展。
这个自定义的 exception 类继承了 PHP 的 exception 类的所有属性,您可向其添加自定义的函数。
我们开始创建 exception 类:<?phpclass customException extends Exception{public function errorMessage(){//error message$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile().': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';return $errorMsg;}}$email = "someone@";try{//check ifif(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE){//throw exception if email is not validthrow new customException($email);}}catch (customException $e){//display custom messageecho $e->errorMessage();}?>这个新的类是旧的 exception 类的副本,外加 errorMessage() 函数。
正因为它是旧类的副本,因此它从旧类继承了属性和方法,我们可以使用 exception 类的方法,比如 getLine() 、getFile() 以及 getMessage()。
例子解释:上面的代码抛出了一个异常,并通过一个自定义的 exception 类来捕获它:customException() 类是作为旧的 exception 类的一个扩展来创建的。
这样它就继承了旧类的所有属性和方法。
创建 errorMessage() 函数。
如果 e-mail 地址不合法,则该函数返回一条错误消息把 $email 变量设置为不合法的 e-mail 地址字符串执行 "try" 代码块,由于 e-mail 地址不合法,因此抛出一个异常"catch" 代码块捕获异常,并显示错误消息多个异常可以为一段脚本使用多个异常,来检测多种情况。
可以使用多个 if..else 代码块,或一个 switch 代码块,或者嵌套多个异常。
这些异常能够使用不同的 exception 类,并返回不同的错误消息:<?phpclass customException extends Exception{public function errorMessage(){//error message$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile().': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';return $errorMsg;}}$email = "someone@";try{//check ifif(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE){//throw exception if email is not validthrow new customException($email);}//check for "example" in mail addressif(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();}?>例子解释:上面的代码测试了两种条件,如何任何条件不成立,则抛出一个异常:customException() 类是作为旧的 exception 类的一个扩展来创建的。
这样它就继承了旧类的所有属性和方法。
创建 errorMessage() 函数。
如果 e-mail 地址不合法,则该函数返回一个错误消息。
执行 "try" 代码块,在第一个条件下,不会抛出异常。
由于 e-mail 含有字符串 "example",第二个条件会触发异常。