Exception::__construct

(PHP 5、PHP 7、PHP 8)

Exception::__construct构造异常

描述

public Exception::__construct(string $message = "", int $code = 0, ?Throwable $previous = null)

构造异常。

参数

message

要抛出的异常消息。

code

异常代码。

previous

用于异常链的先前异常。

注意: 如果属性 $code 和 $message 已经设置,则从子类调用 Exception 类的构造函数将忽略默认参数。

注释

注意:

message 不是二进制安全的。

添加注释

用户贡献注释 3 个注释

talksonweb at gmail dot com
11 年前
对于那些没有做过异常链的人。这是一个例子。

这允许您将先前的异常添加到下一个异常中,并最终为您提供有关发生了什么的详细信息。这在大型应用程序中很有用。

<?php
function theDatabaseObj(){
if(
database_object ){
return
database_object;
}
else{
throw new
DatabaseException("无法连接到数据库");
}
}

function
updateProfile( $userInfo ){
try{
$db = theDatabaseObj();
$db->updateProfile();
}
catch(
DatabaseException $e ){
$message = "用户 :" . $userInfo->username . " 无法更新他的个人资料信息";
/* 注意 '$e'。我将先前的异常添加到此异常中。我以后可以详细了解
问题从哪里开始。最后,数字 '12' 是一个异常代码。我可以使用它来对我的异常进行分类,或者根本不使用它。 */
throw new MemberSettingsException($message,12,$e);
}
}

try{
updateProfile( $userInfo );
}
catch(
MemberSettingsException $e ){
// 这将提供我们上面收集的所有信息。
echo $e->getTraceAsString();
}
?>
mattsch at gmail dot com
11 年前
请注意,虽然 $previous 在提供异常链和更好的可跟踪性方面非常有用,但 PHP 中的所有内部异常(例如 PDOException、ReflectionException 等)在 PHP 内部调用时都没有考虑到 $previous。

因此,如果您的代码抛出一个异常,从中恢复,然后捕获其中一个内部 PHP 异常,从中恢复并抛出另一个异常,则在调用 getPrevious 时将无法知道抛出的第一个异常。

查看:https://bugs.php.net/bug.php?id=63873
ryan dot jentzsch at gmail dot com
7 年前
请注意,code 参数与 exit($code) 不同。
此外,PHP 7(可能在更早的版本中)中的 code 参数将被强制转换为 int,包括负值。以下代码是完全有效的

<?php
try
{
throw new
\Exception('Testing', -12.12);
}
catch (
\Exception $exception)
{
$code = $exception->getCode();
if (
$code < 0)
{
exit(
abs($code));
}
}
To Top