新闻详细
新闻当前位置:新闻详细

php中语句相同为什么有一个会出错,PHP中处理异常有几种方式?请详述

专业编程培训机构——完成蜕变以后轻松拿高薪

电话+V: 152079-09430 ,欢迎咨询php中语句相同为什么有一个会出错,PHP中处理异常有几种方式?请详述4A56555F-273B-4071-BB5A-08E09D3B4806,[python实用课程],[C++单片机原理],[C#网站搭建],[Nodejs小程序开发],[ios游戏开发],[安卓游戏开发],[教会用大脑用想法赚钱实现阶层跨越]

一、php中语句相同为什么有一个会出错

错误一:Parseerror:syntaxerror,unexpected…

这种错误是PHP解析器在解析时遇到了语法错误,直译为:

解析错误:语法错误,意料之外的…

通常是我们在写代码时,语法格式不对,比如:每一条语句都应当以英文分号结束,如果不写分号,或打成了中文分号,就会报这样的错误。这个错误还会在很多语法不正确的地方报错出现。

错误二:Fatalerror:UncaughtError:Calltoundefinedfunction…

代码在执行时遇到了致命错误,直译为:

致命错误:未捕获错误:调用了未定义的函数…

遇到这个错误其实非常好解决,因为这个提示非常明显,就是看后面报错在第几行,找到这一行,仔细查看这一行中所使用的函数名字是否写错。解决思路:既然提示调用了未定义的函数,就是说函数名无法识别,那肯定是写错函数名或自定义函数真的没定义。

错误三:Notice:Arraytostringconversionin…

这个错误是初学者最容易遇到的,只是一个提示错误,级别非常低,不影响整个代码的执行。出现Parseerror或Fatalerror时PHP程序会中断执行。

错误提示可以理解为提示:数组在第…行转换成字符串

一般是由echo后面输出一个数组时导致的,也可能是数组作为字符串进行拼接运算时导致的。因为PHP是弱类型编程语言,在运算时会自动根据环境需要转换数据类型。解决办法就是找到提示的那一行,将数组提前处理好以后再进行字符串运算即可。

错误四:Parseerror:syntaxerror,unexpected‘1’(T_LNUMBER),expectingvariable…

当出现PHP无法解析的语法错误时会提示这个,unexpected是意料之外的…,后面还有提示expecting是指希望出现…。一般在变量名、函数名等取名不符合命名语法规范时会报这个错。解决办法就是仔细看报错的行命名是否正确。

错误五:Warning:mysqli_fetch_assoc()expectsparameter1tobemysqli_result,booleangiven…

这个错误是一个警告错误,也不影响程序的执行。通常出现在数据库读取结果集数据时,初学者比较难找到错误的解决办法,因为根据无法通过提示所在行找出错误。

直译为:

警告:mysqli_fetch_assoc函数期望参数1是mysqli的结果集,但是给了一个布尔值。

也就是说当我们写好SQL语句从数据库读取数据时,本身应该返回结果集,再给结果集中读取数据。但是,结果集却是一个布尔值,所以反推出极有可能是SQL语句写错了,导致执行出错,结果集就成了执行结果false。

解决办法:仔细检查SQL语句,最好是将拼接好的SQL语句输出出来看看,确认没问题再提交到服务器执行。

错误六:Notice:Undefinedvariable:…

直译为:提示:未定义变量a

当使用了一个未定义的变量时,会报这个错,只需要仔细检查变量的定义或拼写正确即可解决。

错误七:Notice:Undefinedindex:usernamein…

直译为:提示:未定义的索引:username

通常在使用了一个未定义的数组元素时会出现,PHP中有一种特殊的关联数组,可以使用键名访问值,在提示是也按索引数组的方式提示,所以容易造成初学者误解。解决办法就是仔细查看是不是数组键名是否写错或未定义。

错误八:乱码

当看到网页上显示一段看不懂的符号、乱糟糟的繁体字或问号时,我们称为乱码。这是由于PHP生成HTML代码时的字符集与浏览器默认展示的字符集不相同导致的。

解决办法:

二、phperrorreporting报告有哪些类型的错误报告

error_reporting()

在php中有四种类型的错误和警告。它们是:

通常函数错误:1

通常警告:2

分析错误:4

注释(警告用户,可以忽略该信息,但是这个问题可能给您的代码会带来一些错误):8

三、PHP中处理异常有几种方式?请详述

php中异常处理方法总结:

当异常被触发时,通常会发生:

在PHP5中添加了类似于其它语言的错误异常处理模块。在PHP代码中所产生的异常可被throw语句抛出并被catch语句捕获。需要进行异常处理的代码都必须放入try代码块内,以便捕获可能存在的异常。每一个try至少要有一个与之对应的catch。使用多个catch可以捕获不同的类所产生的异常。当try代码块不再抛出异常或者找不到catch能匹配所抛出的异常时,PHP代码就会在跳转到最后一个catch的后面继续执行。当然,PHP允许在catch代码块内再次抛出(throw)异常。当一个异常被抛出时,其后(译者注:指抛出异常时所在的代码块)的代码将不会继续执行,而PHP就会尝试查找第一个能与之匹配的catch。如果一个异常没有被捕获,而且又没用使用set_exception_handler()作相应的处理的话,那么PHP将会产生一个严重的错误,并且输出UncaughtException...(未捕获异常)的提示信息。

1、异常类的层级关系:

代码如下复制代码

classNotFoundExceptionextendsException{}

classInputExceptionextendsException{}

classDBExceptionextendsException{}

2、配置未捕捉异常的处理器:

代码如下复制代码

functionexception_uncaught_handler(Exception$e){

header('Content-type:text/html;charset=utf-8');

if($einstanceofNotFoundException)

exit($e->getMessage());

elseif($einstanceofDBException)

exit($e->getMessage());

else

exit($e->getMessage());

}

set_exception_handler('exception_uncaught_handler');

3、在数据库连接代码,手动抛出DBException异常但未使用try…catch进行捕获处理,该异常将被PHP自定义异常处理器

代码如下复制代码

exception_uncaught_handler()函数处理:

$this->resConn=mysql_connect($CONFIGS['db_host'],$CONFIGS['db_user'],$CONFIGS['db_pwd']);

if(false==is_resource($this->resConn))

thrownewDBException('数据库连接失败。'.mysql_error($this->resConn));

4、业务逻辑一瞥:

if(0!=strcmp($curAlbum->interest_id,$it))

thrownewNotFoundException('很抱歉,你所访问的相册不存在');

以上就是PHP自定义异常处理器的具体使用方法

实例

代码如下复制代码

<?php

classcustomExceptionextendsException

{

publicfunctionerrorMessage()

{

//errormessage

$errorMsg='Erroronline'.$this->getLine().'in'.$this->getFile()

.':<b>'.$this->getMessage().'</b>isnotavalidE-Mailaddress';

return$errorMsg;

}

}

$email="someone@example.com";

try

{

//checkif

if(filter_var($email,FILTER_VALIDATE_EMAIL)===FALSE)

{

//throwexceptionifemailisnotvalid

thrownewcustomException($email);

}

//checkfor"example"inmailaddress

if(strpos($email,"example")!==FALSE)

{

thrownewException("$emailisanexamplee-mail");

}

}

catch(customException$e)

{

echo$e->errorMessage();

}

catch(Exception$e)

{

echo$e->getMessage();

}

?>

例子解释:

上面的代码测试了两种条件,如何任何条件不成立,则抛出一个异常:

1.customException()类是作为旧的exception类的一个扩展来创建的。这样它就继承了旧类的所有属性和方法。

2.创建errorMessage()函数。如果e-mail地址不合法,则该函数返回一个错误消息。

3.执行"try"代码块,在第一个条件下,不会抛出异常。

4.由于e-mail含有字符串"example",第二个条件会触发异常。

5."catch"代码块会捕获异常,并显示恰当的错误消息

如果没有捕获customException,紧紧捕获了baseexception,则在那里处理异常。

重新抛出异常

有时,当异常被抛出时,您也许希望以不同于标准的方式对它进行处理。可以在一个"catch"代码块中再次抛出异常。

代码如下复制代码

<?php

/*

*/

/*

*总结:PHP异常的使用方法分三步:

*第一步:定义异常类,如果不定义就用系统默认的异常类;

*第二步:当出现异常时用throw抛出异常,例如ex1($num2);异常的参数是$num2用该异常的getMessage()获取;

*第三步:触发异常,用try子句,当满足条件时thrownewex1($num);

*第四步:catch捕获异常catch(ex2$e),相当于实例化一个定义好的异常类ex2为$e;

*

*注意,异常可以定义多个,但是只能触发一个,也就是说只能用catch捕获一个异常

*/

//================基本异常类

//创建可抛出一个异常的函数

functionnum($num){

if($num>1){//异常抛出条件

$msg=”数值不能大于1″;//异常提示信息

thrownewException($msg);//抛出异常

}

echo“数值小于1″;

}

//在“try”代码块中触发异常

try{

num(3);

echo“执行正常”;

}

//捕获异常

catch(Exception$e){

echo“错误信息:”.$e->getMessage();//Exception()的系统方法获取异常信息

echo“错误文件:”.$e->getFile();//Exception()的系统方法获取异常文件名

echo“行数:”.$e->getLine();//Exception()的系统方法获取异常行数

}

//======================================================================

echo“<br>========================================================<br>”;

//扩展基本异常类

functioncheckEmail($email){//定义一个可以抛出异常的判断EMAIL合法性的函数

if(filter_var($email,FILTER_VALIDATE_EMAIL)==false){

thrownewcheckEmailException($email);//抛出异常用EMAIL做参数

}

echo“邮件合法”;

}

classcheckEmailExceptionextendsException{//定义扩展异常类

publicfunctionerrormsg(){

$msg=”错误原因:”.$this->getMessage().”不是一个合法的EMAIL地址!”;

$msg.=”错误文件名:”.$this->getFile();

$msg.=”错误行数:”.$this->getLine();

echo$msg;

}

}

$email=”email…..@chhua.com“;

try{//触发异常

checkEmail($email);

}

//捕获异常

catch(checkEmailException$e){

$e->errormsg();

}

//==================================多个异常的捕获

echo“<br>===================================================<br>”;

classex1extendsException{//定义一个异常类

publicfunctionmsg(){

$msg=”错误原因:”.$this->getMessage().”大于100<br>”;

$msg.=”错误文件:”.$this->getFile().”<Br>”;

$msg.=”错误代码:”.$this->getCode().”<br>”;

$msg.=”行数:”.$this->getLine().”<br>”;

echo$msg;

}

}

classex2extendsException{//定义一个异常类

publicfunctionmsg(){

$msg=”错误原因:”.$this->getMessage().”等于100<br>”;

$msg.=”错误文件:”.$this->getFile().”<Br>”;

$msg.=”行数:”.$this->getLine().”<br>”;

echo$msg;

}

}

$num2=100;

try{

if($num2>100){//当条件满足时触发

thrownewex1($num2);

}

if($num2==100){//当条件满足时触发

thrownewex2($num2);

}

}

catch(ex2$e){//捕获触发的异常

$e->msg();

}

catch(ex1$e){//捕获触发的异常

$e->msg();

}

/*

*总结:PHP异常的使用方法分三步:

*第一步:定义异常类,如果不定义就用系统默认的异常类;

*第二步:当出现异常时用throw抛出异常,例如ex1($num2);异常的参数是$num2用该异常的getMessage()获取;

*第三步:触发异常,用try子句,当满足条件时thrownewex1($num);

*第四步:catch捕获异常catch(ex2$e),相当于实例化一个定义好的异常类ex2为$e;

*

*注意,异常可以定义多个,但是只能触发一个,也就是说只能用catch捕获一个异常

*/

【FUTURE PROGRAMMING COURSE】尊享对接老板

电话+V: 152079-09430

机构由一批拥有10年以上开发管理经验,且来自互联网或研究机构的IT精英组成,负责研究、开发教学模式和课程内容。公司具有完善的课程研发体系,一直走在整个行业发展的前端,在行业内竖立起了良好的品质口碑。

php中语句相同为什么有一个会出错,PHP中处理异常有几种方式?请详述4A56555F-273B-4071-BB5A-08E09D3B4806
Copyright2023未知推广科技