搜索
异常处理 - php try catch 中的catch(Exception $e) 中的Exception 有什么作用?
PHP中文网
PHP中文网 2017-04-10 16:29:59
[PHP讨论组]

如题. Exception 是起作用域的作用吗?还是语言结构?

PHP中文网
PHP中文网

认证0级讲师

全部回复(4)
迷茫

首先很明确的是 try ... catch ... 是一个语言结构。
那既然如此就不能用函数参数类型限定的方式去理解 catch 后面的括号里的 Exception 了。

如果这里没有 Exception,比如这样写:

<?php
try {

} catch ($e) {

}

你会得到一个错误:

Parse error: parse error, expecting "identifier (T_STRING)"' or "namespace (T_NAMESPACE)"' or `"\\ (T_NS_SEPARATOR)"' in ...

显而易见,这里的 Exception 是一种『预期』,用于判断捕获到的异常类型的。

如果用类的情景来翻译一下,大概就类似于:

<?php
$e = new Exception;

if ($e instanceof Exception) {
    # do something ...
}

如果你是多个 catch,比如:

<?php
try {
    throw new CustomException("Error Processing Request", 1);
} catch (CustomException $e) {
    echo 1;
} catch (Exception $e) {
    echo 2;
}

class CustomException extends Exception
{
}

虽然我们抛出的异常也属于 Exception,但是 catch 捕捉到第一个就停止了,所以这里只会输出 1,如果互换 catch (CustomException $e)catch (Exception $e) 也一样。

这也和以下情况相同:

<?php
$e = new CustomException;

if ($e instanceof CustomException) {
    echo 1;
} elseif ($e instanceof Exception) {
    echo 2;
}

class CustomException extends Exception
{
}
巴扎黑

可以看下java,Exception是个类名,catch的$e是类的实例
你也可以自己写个类来继承Exception,然后再catch中抓住

巴扎黑

类型吧。你也可以写自己的Exception类

天蓬老师

仔细看文档:
Exception是所有异常的基类。

PHP: Exception - Manual

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号