在之前的文章中给大家带来了《一定搞得懂PHP中如何添加图片水印》,其中通过过示例给大家详细介绍了在PHP中应该如何添加水印,本篇文章我们继续来看一下PHP中错误处理的相关知识,希望能帮助到大家!
PHP中的错误和异常处理在PHP中是非常常用的,在我们的日常开发中,肯定会遇到比如忘记加分号了、函数名写错或者函数被重新定义了等等很多的错误,如果说在开发过程中,能够发现错误显示错误,那肯定对我们的开发是十分有利的。
因此,在开发项目的时候合理使用一场处理,会有助于我们发现错误改正错误以加快开发速度。那接下来我们就一起来看一看应该怎样去了解我们的错误处理。大家也可以通过免费的《php错误处理》教学视频来进行学习。
PHP中的异常处理类
在PHP中就提供了内置的异常处理类,也就是Exception
,这个类包含了一些处理异常的函数,这些函数可以捕获程序异常和错误。
那下面列举出该类中较为常用的函数:
getTraceAsString()
:返回已格式化成字符串的、由函数 getTrace() 函数所产生的信息__toString()
:产生异常的字符串信息,它可以重载。注意,该函数最前部是两个下划线getMessage()
:返回异常的消息内容getLine()
:返回发生错误的代码行号getCode()
:以数字形式返回异常代码getFile()
:返回发生异常的文件名getTrace()
:返回 backtrace() 数组
捕获程序中的异常
程序中的异常出现一般不会自己显现出来,这时候我们可以通过try catch
语句和 throw
关键字,来达到捕捉程序中异常的目的。
try catch语句和流程控制的语句类似,throw关键字可以抛出一个异常,我们可以通过类似条件选择的结构来完成捕获程序中的异常。try catch语句的语法格式如下:
try{ // 可能出现异常或错误的代码,比如文件操作、数据库操作等 }catch(Exception $a){ // $a 为一个异常类的对象 // 输出错误信息 }
在我们需要进行捕捉程序异常时,需要把需要捕捉的代码放入try代码块里面,在上述语法中,每一个try应该至少有一个与之对应的catch。当try代码块没有catch匹配的异常时,代码就会跳转到最后一个catch后面继续进行。
在其中产生的异常都可以被throw语句跑出来并且被catch捕获,当有一个异常出现的时候,在其后面的代码就不会再继续执行了。
示例如下:
<?php try{ $err = '抛出异常信息,并跳出 try 语句块'; if(is_dir('./demo')){ echo '这里是一些可能会发生异常的代码'; }else{ throw new Exception($err, 20211020); // 抛出异常 } echo '上面抛出异常的话,这行代码将不会执行,转而执行 catch 中的代码。<br>'; }catch(Exception $e){ echo '捕获异常:'.$e->getMessage().'<br>错误代码:'.$e->getCode().'<br>'; } echo '继续执行 try catch 语句之外的代码'; ?>
输出结果:
再上述示例中,通过try语句试图判断当前目录下有没有名为demo的目录,目录不存在,所以执行了throw关键字抛出异常。异常发现抛出后,try语句的剩下语句就不会在运行了。
创建自己的异常类
PHP中可以事先定义一些异常,因为PHP中很少会主动的抛出异常,当事先定义好异常后,我们可以通过if-else来对可能出现的异常进行判断,手动来抛出异常,再PHP中经常能够使用到我们自己创建的异常类。
示例如下:
<?php class emailException extends Exception{ function __toString(){ return "<b>email is null</b>file:".$this->getFile().',line:'. $this->getLine(); } } class nameException extends Exception{ } ?>
上述示例中,定义了两个异常类,都继承自 Exception 基类。
在实际的业务中,我们也会根据不同的需求来抛出不同的异常,示例如下:
function reg($reg) { if (empty($reg['email'])) { throw new emailException("emaill is null", 1); } if(empty($reg['name'])) { throw new nameException("name is null", 2); } }
在执行业务代码时,可以使用if语句来判断异常会发生的地方,然后手动抛出异常,通过语句实现将不同的异常分发给不同的异常类处理;再下面这段示例中,根据不同的情况捕获不同的异常,当第一个catch捕获了异常,即使程序中依然存在其他异常,也会跳过其他的catch代码块。无论程序中有没有出现异常,最后的finally中的语句都会执行的。示例如下:
try{ $reg = array('phone'=>'1888888888'); reg($reg); } catch(emailException $e) { echo $e; } catch(nameException $e) { echo 'error msg:' .$e->getMessage().'error code:'.$e->getCode(); } finally { echo ' finally'; }
想要了解更多关于PHP的知识,可以点击《PHP视频教程》进行学习!
以上是五分钟带你看懂PHP中的异常处理是什么情况的详细内容。更多信息请关注PHP中文网其他相关文章!

负载均衡会影响会话管理,但可以通过会话复制、会话粘性和集中式会话存储解决。1.会话复制在服务器间复制会话数据。2.会话粘性将用户请求定向到同一服务器。3.集中式会话存储使用独立服务器如Redis存储会话数据,确保数据共享。

Sessionlockingisatechniqueusedtoensureauser'ssessionremainsexclusivetooneuseratatime.Itiscrucialforpreventingdatacorruptionandsecuritybreachesinmulti-userapplications.Sessionlockingisimplementedusingserver-sidelockingmechanisms,suchasReentrantLockinJ

PHP会话的替代方案包括Cookies、Token-basedAuthentication、Database-basedSessions和Redis/Memcached。1.Cookies通过在客户端存储数据来管理会话,简单但安全性低。2.Token-basedAuthentication使用令牌验证用户,安全性高但需额外逻辑。3.Database-basedSessions将数据存储在数据库中,扩展性好但可能影响性能。4.Redis/Memcached使用分布式缓存提高性能和扩展性,但需额外配

Sessionhijacking是指攻击者通过获取用户的sessionID来冒充用户。防范方法包括:1)使用HTTPS加密通信;2)验证sessionID的来源;3)使用安全的sessionID生成算法;4)定期更新sessionID。

本文比较了PHP和ASP.NET,重点是它们对大规模Web应用程序,性能差异和安全功能的适用性。两者对于大型项目都是可行的,但是PHP是开源和无关的,而ASP.NET,


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

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

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具