php中,用try/catch捕获了异常,为啥还会有警告?有没有办法去掉呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php中,用try/catch捕获了异常,为啥还会有警告?有没有办法去掉呢?相关的知识,希望对你有一定的参考价值。

代码:
try

preg_match_all($pattern,$string,$all);

catch (Exception $ex)

echo $ex->getTraceAsString();


错误提示:
Warning: preg_match_all() [function.preg-match-all]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for '8.0/no DST' instead in F:\php\doom\newfile.php on line 52

Warning: preg_match_all() [function.preg-match-all]: Empty regular expression in F:\php\doom\newfile.php on line 52
能否说明下“@抑制错误”的具体语法呢

参考技术A 因为它既抛出异常又触发错误, 你需要@抑制错误, try并不负责屏蔽错误触发, 只负责接收抛出的异常 参考技术B php 不提供内置抛出异常,如果用try catch 必须自定义异常,并且手动throws才可以! 参考技术C 试试把error_reporting(0);这句放在php文件的开头
至于@
则是在函数前加 如
while ($row = @mysql_fetch_assoc($qrt))本回答被提问者和网友采纳
参考技术D 我也想来看看结果到底是咋样的。来学习了。

2019.3.23 捕获异常

PHP中try{}catch{}语句概述

1.PHP5添加了类似于其它语言的异常处理模块。在 PHP 代码中所产生的异常可被 throw语句抛出并被 catch 语句捕获。(注:一定要先抛才能获取)

2.需要进行异常处理的代码都必须放入 try 代码块内,以便捕获可能存在的异常。

3.每一个 try 至少要有一个与之对应的 catch。

4.使用多个 catch可以捕获不同的类所产生的异常。

5.当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP 代码就会在跳转到最后一个 catch 的后面继续执行。

6.当然,PHP允许在 catch 代码块内再次抛出(throw)异常。

7.当一个异常被抛出时,其后(译者注:指抛出异常时所在的代码块)的代码将不会继续执行,而 PHP 就会尝试查找第一个能与之匹配的 catch。

8.如果一个异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么 PHP 将会产生一个严重的错误,并且输出 Uncaught Exception ... (未捕获异常)的提示信息。

手动抛出和捕获异常

// 使用think自带异常类抛出异常

throw new hinkException(‘异常消息‘, 10006);

助手函数简化异常的代码

// 使用助手函数抛出异常

exception(‘异常消息‘, 10006);

如果需要抛出自定义异常,可以使用:

// 抛出自定义异常

exception(‘异常消息‘, 10006,‘appcommonexceptionNotFoundException‘);

手动捕获异常方式是使用try-catch,例如:

try {
    // 这里是主体代码
} catch (ValidateException $e) {
    // 这是进行验证异常捕获
    return json($e->getError());
} catch (Exception $e) {
    // 这是进行异常捕获
    return json($e->getMessage());
}
可以使用PHP的异常捕获进行必要的处理,但需要注意一点,
在异常捕获中不要使用thinkController类的error、success和redirect方法,

因为上述三个方法会抛出HttpResponseException异常,从而影响正常的异常捕获,例如:
try{
    Db::name(‘user‘)->find();
    $this->success(‘执行成功!‘);
}catch(Exception $e){
    $this->error(‘执行错误‘);
}
应该改成
try{
    Db::name(‘user‘)->find();
}catch(Exception $e){
    $this->error(‘执行错误‘);
}
$this->success(‘执行成功!‘);

 



 

 
 

以上是关于php中,用try/catch捕获了异常,为啥还会有警告?有没有办法去掉呢?的主要内容,如果未能解决你的问题,请参考以下文章

php try catch 捕获哪些错误

JAVA中try catch捕获异常的问题

2019.3.23 捕获异常

php:try-catch 未捕获所有异常

php的异常处理,一个try代码块中抛出了多个异常,怎么全都捕获,并输出来?下面的代码为只输出一个异常?

php 异常