PHP Conference Japan 2024

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 **不是** 二进制安全的。

添加备注

用户贡献的备注 2 条备注

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

这允许您将之前的异常添加到下一个异常中,并最终获得有关发生情况的详细信息。这在大型应用程序中非常有用。

<?php
function theDatabaseObj(){
if(
database_object ){
return
database_object;
}
else{
throw new
DatabaseException("Could not connect to the database");
}
}

function
updateProfile( $userInfo ){
try{
$db = theDatabaseObj();
$db->updateProfile();
}
catch(
DatabaseException $e ){
$message = "The user :" . $userInfo->username . " could not update his profile information";
/* notice the '$e'. I'm adding the previous exception to this exception. I can later get a detailed view of
where the problem began. Lastly, the number '12' is an exception code. I can use this for categorizing my
exceptions or don't use it at all. */
throw new MemberSettingsException($message,12,$e);
}
}

try{
updateProfile( $userInfo );
}
catch(
MemberSettingsException $e ){
// this will give all information we have collected above.
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
To Top