很多站长朋友们都不太清楚php方法声明异常,今天小编就来给大家整理php方法声明异常,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 一个php项目,报出了异常,请您解答。 2、 PHP中处理异常有几种方式?请详述 3、 如何组织 PHP 中的异常 4、 如何处理 PHP 的错误与异常 5、 PHP5中的异常处理详解[1] 6、 PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法 一个php项目,报出了异常,请您解答。根据信息来看:这是smarty模板写的不对,可能清况是你配置了smarty的开闭标签为‘{’,'}',然后在html中(这里是你的javascript代码中)出现了这些开闭标签,然后smarty在编译的时候就会以为遇到smarty语法,然后进行编译,显然,你这里是javascript逻辑,而不是smarty逻辑,smarty编译就是发生错误。
解决方法有两种,任选一种应该可以:
1?重新定义个smarty开闭标签,保证不与常用标签冲突
2?用smarty中的{literal}标签,来包裹javascript代码,示例可参考
{literal}
<script?language=javascript>
? <!--
? function?isblank(field)?{
? if?(field.value?==?'')?
? {?return?false;?}
? else
? {
? document.loginform.submit();
? return?true;
? }
? }
? //?-->
</script>
{/literal}
Literal 标签区域内的数据将被当作文本处理,此时模板将忽略其内部的所有字符信息. 该特性用于显示有可能包含大括号等字符信息的 javascript 脚本. 当这些信息处于 {literal}{/literal} 标签中时,模板引擎将不分析它们,而直接显示.
PHP中处理异常有几种方式?请详述php中异常处理方法总结:
当异常被触发时,通常会发生:
在PHP5中添加了类似于其它语言的错误异常处理模块。在 PHP代码中所产生的异常可被 throw语句抛出并被 catch 语句捕获。需要进行异常处理的代码都必须放入 try 代码块内,以便捕获可能存在的异常。每一个 try 至少要有一个与之对应的 catch。使用多个 catch 可以捕获不同的类所产生的异常。当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP 代码就会在跳转到最后一个 catch 的后面继续执行。当然,PHP 允许在 catch 代码块内再次抛出(throw)异常。当一个异常被抛出时,其后(译者注:指抛出异常时所在的代码块)的代码将不会继续执行,而 PHP 就会尝试查找第一个能与之匹配的 catch。如果一个异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么 PHP 将会产生一个严重的错误,并且输出 Uncaught Exception ... (未捕获异常)的提示信息。
1、异常类的层级关系:
代码如下 复制代码
class NotFoundException extends Exception{}
class InputException extends Exception{}
class DBException extends Exception{}
2、配置未捕捉异常的处理器:
代码如下 复制代码
function exception_uncaught_handler(Exception $e) {
header('Content-type:text/html; charset=utf-8');
if ($e instanceof NotFoundException)
exit($e->getMessage());
elseif ($e instanceof DBException)
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))
throw new DBException('数据库连接失败。'.mysql_error($this->resConn));
4、业务逻辑一瞥:
if (0 != strcmp($curAlbum->interest_id, $it))
throw new NotFoundException('很抱歉,你所访问的相册不存在');
以上就是PHP自定义异常处理器的具体使用方法
实例
代码如下 复制代码
<?php
class 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@example测试数据";
try
{
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
{
//throw exception if email is not valid
throw new customException($email);
}
//check for "example" in mail address
if(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();
}
?>
例子解释:
上面的代码测试了两种条件,如何任何条件不成立,则抛出一个异常:
1.customException() 类是作为旧的 exception 类的一个扩展来创建的。这样它就继承了旧类的所有属性和方法。
2.创建 errorMessage() 函数。如果 e-mail 地址不合法,则该函数返回一个错误消息。
3.执行 "try" 代码块,在第一个条件下,不会抛出异常。
4.由于 e-mail 含有字符串 "example",第二个条件会触发异常。
5."catch" 代码块会捕获异常,并显示恰当的错误消息
如果没有捕获 customException,紧紧捕获了 base exception,则在那里处理异常。
重新抛出异常
有时,当异常被抛出时,您也许希望以不同于标准的方式对它进行处理。可以在一个 "catch" 代码块中再次抛出异常。
代码如下 复制代码
<?php
/*
*/
/*
* 总结:PHP异常的使用方法分三步:
* 第一步:定义异常类,如果不定义就用系统默认的异常类;
* 第二步:当出现异常时用 throw 抛出异常,例如 ex1($num2);异常的参数是$num2用该异常的getMessage()获取;
* 第三步:触发异常,用try子句,当满足条件时 throw new ex1($num);
* 第四步:catch捕获异常 catch (ex2 $e),相当于实例化一个定义好的异常类ex2为$e;
*
* 注意,异常可以定义多个,但是只能触发一个,也就是说只能用catch捕获一个异常
*/
//================基本异常类
//创建可抛出一个异常的函数
function num($num){
if ($num>1){//异常抛出条件
$msg=”数值不能大于1″;//异常提示信息
throw new Exception($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>”;
//扩展基本异常类
function checkEmail($email){//定义一个可以抛出异常的判断EMAIL合法性的函数
if (filter_var($email,FILTER_VALIDATE_EMAIL)==false){
throw new checkEmailException($email);//抛出异常用EMAIL做参数
}
echo “邮件合法”;
}
class checkEmailException extends Exception{//定义扩展异常类
public function errormsg(){
$msg=”错误原因:”.$this->getMessage().”不是一个合法的EMAIL地址!”;
$msg.=”错误文件名:”.$this->getFile();
$msg.=”错误行数:”.$this->getLine();
echo $msg;
}
}
$email=”email…..@chhua测试数据“;
try {//触发异常
checkEmail($email);
}
//捕获异常
catch (checkEmailException $e){
$e->errormsg();
}
//==================================多个异常的捕获
echo “<br>===================================================<br>”;
class ex1 extends Exception{//定义一个异常类
public function msg(){
$msg=”错误原因:”.$this->getMessage().”大于100<br>”;
$msg.=”错误文件:”.$this->getFile().”<Br>”;
$msg.=”错误代码:”.$this->getCode().”<br>”;
$msg.=”行数:”.$this->getLine().”<br>”;
echo $msg;
}
}
class ex2 extends Exception{//定义一个异常类
public function msg(){
$msg=”错误原因:”.$this->getMessage().”等于100<br>”;
$msg.=”错误文件:”.$this->getFile().”<Br>”;
$msg.=”行数:”.$this->getLine().”<br>”;
echo $msg;
}
}
$num2=100;
try {
if ($num2>100){//当条件满足时触发
throw new ex1($num2);
}
if ($num2==100){//当条件满足时触发
throw new ex2($num2);
}
}
catch (ex2 $e){//捕获触发的异常
$e->msg();
}
catch (ex1 $e){//捕获触发的异常
$e->msg();
}
/*
* 总结:PHP异常的使用方法分三步:
* 第一步:定义异常类,如果不定义就用系统默认的异常类;
* 第二步:当出现异常时用 throw 抛出异常,例如 ex1($num2);异常的参数是$num2用该异常的getMessage()获取;
* 第三步:触发异常,用try子句,当满足条件时 throw new ex1($num);
* 第四步:catch捕获异常 catch (ex2 $e),相当于实例化一个定义好的异常类ex2为$e;
*
* 注意,异常可以定义多个,但是只能触发一个,也就是说只能用catch捕获一个异常
*/
?>
如何组织 PHP 中的异常try catch组织php的异常
try{
????throw?new?Exception("error");
}catch(Exception?$e){
????echo?"Message:?".$e->getMessage();
}
在 try 代码块中执行代码,并根据需要通过 throw 来抛出异常。
每一个 throw 对应一个 catch , try 代码块中通过throw抛出的异常会被 catch 代码块接收到,并创建一个包含异常信息的对象 ($e)。
通过从这个 exception 对象调用 $e->getMessage(),输出来自该异常的错误消息。
注:当 try 代码块执行到了 throw 后,try代码块不会再继续执行,转而调到 catch 代码块,与函数封装中的 return 有相似作用。
最后,异常处理能提高程序的健壮性,增强可维护性,有利于异常的集中处理,从而保证程序的可靠性。
如何处理 PHP 的错误与异常首先要知道什么是PHP异常?
异常(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:6 Stack trace: #0 C:\webfolder\test.php(12): checkNum(28) #1 {main} thrown in C:\webfolder\test.php on line 6
Try, 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 shown echo ‘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 类:
复制代码代码如下:
<?php
class 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@example…com”;try {
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
//throw exception if email is not valid throw
new customException($email);
}
}catch (customException $e)
{
//display custom message
echo $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 类,并返回不同的错误消息:
复制代码代码如下:
<?php
class 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@example测试数据”;try {
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
//throw exception if email is not valid throw new
customException($email);
}
//check for “example” in mail address
if(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”,第二个条件会触发异常。
“catch” 代码块会捕获异常,并显示恰当的错误消息
如果没有捕获 customException,紧紧捕获了 base exception,则在那里处理异常。
重新抛出异常
有时,当异常被抛出时,您也许希望以不同于标准的方式对它进行处理。可以在一个 “catch” 代码块中再次抛出异常。
脚本应该对用户隐藏系统错误。对程序员来说,系统错误也许很重要,但是用户对它们并不感兴趣。为了让用户更容易使用,您可以再次抛出带有对用户比较友好的消息的异常:
复制代码代码如下:
<?php
class customException extends Exception { public function errorMessage() {
//error message
$errorMsg = $this->getMessage().' is not a valid E-Mail address.'; return $errorMsg; } }$email = “someone@example测试数据”;try { try {
//check for “example” in mail address
if(strpos($email, “example”) !== FALSE) {
//throw exception if email is not valid throw new
Exception($email); } } catch(Exception $e) {
//re-throw exception throw new
customException($email); } }catch (customException $e) {
//display custom message
echo $e->errorMessage(); }
?>
例子解释:
上面的代码检测在邮件地址中是否含有字符串 “example”。如果有,则再次抛出异常:
customException() 类是作为旧的 exception 类的一个扩展来创建的。这样它就继承了旧类的所有属性和方法。
创建 errorMessage() 函数。如果 e-mail 地址不合法,则该函数返回一个错误消息。
把 $email 变量设置为一个有效的邮件地址,但含有字符串 “example”。
“try” 代码块包含另一个 “try” 代码块,这样就可以再次抛出异常。
由于 e-mail 包含字符串 “example”,因此触发异常。
“catch” 捕获到该异常,并重新抛出 “customException”。
捕获到 “customException”,并显示一条错误消息。
如果在其目前的 “try” 代码块中异常没有被捕获,则它将在更高层级上查找 catch 代码块。
设置顶层异常处理器 (Top Level Exception Handler)
set_exception_handler() 函数可设置处理所有未捕获异常的用户定义函数。
复制代码代码如下:
<?php
function myException($exception){
echo “<b>Exception:</b> ” , $exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');
?>
以上代码的输出应该类似这样:
Exception: Uncaught Exception occurred
在上面的代码中,不存在 “catch” 代码块,而是触发顶层的异常处理程序。应该使用此函数来捕获所有未被捕获的异常。
异常的规则
需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。
每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。
使用多个 catch 代码块可以捕获不同种类的异常。
可以在 try 代码块内的 catch 代码块中再次抛出(re-thrown)异常。
简而言之:如果抛出了异常,就必须捕获它。
PHP5中的异常处理详解[1]首先是try catch
??? 〈?php??? $path = D:\\\\in txt ;??? try //检测异常??? {??? file_open($path);??? }??? catch(Exception $e) //捕获异常??? {??? echo $e 〉getMessage();??? }
??? function file_open($path)??? {??? if(!file_exists($path)) //如果文件无法找到 抛出异常对象??? {??? throw new Exception( 文件无法找到 );??? }
??? if(!fopen($path r )) //如果文件无法打开 抛出异常对象??? {??? throw new Exception( 文件无法打开 );??? }??? }??? ?〉
注意用$e 〉getMessage()输出异常信息
输出异常完整信息
??? 〈?php??? $path = D:\\\\in txt ;
??? try??? {??? file_open($path); //尝试打开文件??? }??? catch(Exception $e)??? {??? echo 异常信息 $e 〉getMessage() \\n ; //返回用户自定义的异常信息??? echo 异常代码 $e 〉getCode() \\n ; //返回用户自定义的异常代码??? echo 文件名 $e 〉getFile() \\n ; //返回发生异常的PHP程序文件名??? echo 异常代码所在行 $e 〉getLine() \\n ; //返回发生异常的代码所在行的行号??? echo 传递路线 ;??? print_r($e 〉getTrace()); //以数组形式返回跟踪异常每一步传递的路线??? echo $e 〉getTraceAsString(); //返回格式化成字符串的getTrace函数信息??? }
??? function file_open($path)??? {??? if(!file_exists($path)) //如果文件不存在 则抛出错误??? {??? throw new Exception( 文件无法找到 );??? }
??? if(!fopen($path r ))??? {??? throw new Exception( 文件无法打开 );??? }??? }??? ?〉
3 扩展异常 即自定义异常
??? 〈?php??? class FileExistsException extends Exception{} //用于处理文件不存在异常的类??? class FileOpenException extends Exception{} //用于处理文件不可读异常的类
??? $path = D:\\\\in txt ;
??? try??? {??? file_open($path);??? }??? catch(FileExistsException $e) //如果产生FileExistsException异常则提示用户确认文件位置??? {??? echo 程序在运行过程中发生了异常 $e 〉getMessage() \\n ;??? echo 请确认文件位置 ;??? }??? catch(FileOpenException $e) //如果产生FileOpenException异常则提示用户确认文件的可读性??? {??? echo 程序在运行过程中发生了异常 $e 〉getMessage() \\n ;??? echo 请确认文件的可读性 ;??? }??? catch(Exception $e)??? {??? echo [未知异常] ;??? echo 异常信息 $e 〉getMessage() \\n ; //返回用户自定义的异常信息??? echo 异常代码 $e 〉getCode() \\n ; //返回用户自定义的异常代码??? echo 文件名 $e 〉getFile() \\n ; //返回发生异常的PHP程序文件名??? echo 异常代码所在行 $e 〉getLine() \\n ; //返回发生异常的代码所在行的行号??? echo 传递路线 ;??? print_r($e 〉getTrace()); //以数组形式返回跟踪异常每一步传递的路线??? echo $e 〉getTraceAsString(); //返回格式化成字符串的getTrace函数信息??? }
??? function file_open($path)??? {??? if(!file_exists($path))??? {??? throw new FileExistsException( 文件无法找到 ); //抛出FileExistsException异常对象??? }
??? if(!fopen($path r ))??? {??? throw new FileOpenException( 文件无法打开 ); //抛出FileOpenException异常对象
lishixinzhi/Article/program/PHP/201311/21471
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法其实,这是一个非常容易解决掉的问题。在我看来,似曾相识,呵呵,最近学JavaScript可是学会了使用var声明变量。
其实,在PHP中根本不需要使用var声明的,但是当一个变量作为一个类的成员变量的时候,使用var还是没有问题的。
在外部使用var就报错Parse
error:
syntax
error,
unexpected
T_VAR
in...,例如我的出错信息:
Parse
error:
syntax
error,
unexpected
T_VAR
in
D:\Apache2.2\htdocs\shirdrn\page\p2\pageUtil.inc
on
line
34
我在测试:在一个类的内部,使用一个自己定义的类对象作为这个类的成员时,出错了。
Address类对应的address.inc代码:
复制代码
代码如下:
<?php
class
Address
{
var
$road;
function
Address(){}
function
setRoad($road){
$this->road
=
$road;
}
}
?>
Person类及其测试代码为person.php如下:
复制代码
代码如下:
<?php
require("address.inc");
class
Person
{
var
$name;
var
$address;
function
Person(){
}
function
display(){
echo
"Name
:
".$this->name."<BR>";
echo
"Road
:
".$this->address->road."<BR>";
}
}
var
$p
=
new
Person();
$p->address
=
new
Address();
$p->address->setRoad("Chagnchun
Road");
$p->name
=
"Shirdrn";
$p->display();
?>
关于php方法声明异常的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php方法声明异常 php使用什么函数声明变量的详细内容...