专业编程培训机构——完成蜕变以后轻松拿高薪
电话+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精英组成,负责研究、开发教学模式和课程内容。公司具有完善的课程研发体系,一直走在整个行业发展的前端,在行业内竖立起了良好的品质口碑。