Exception::__construct
(PHP 5, PHP 7, PHP 8)
Exception::__construct — 例外を作成する
説明
例外を作成します。
パラメータ
message
-
スローする例外メッセージ。
code
-
例外コード。
previous
-
以前に使われた例外。例外の連結に使用します。
注意: Exception クラスのコンストラクタをサブクラス側から呼ぶと、 $code と $message が設定済みの場合はデフォルトの引数を無視します。
注意
注意:
message
は、バイナリセーフ ではありません。
+add a note
User Contributed Notes 2 notes
talksonweb at gmail dot com ¶
11 years ago
For those that haven't done exception chaining. Here's an example.
This allows you to add the previous exception to the next one and give yourself detailed information in the end as to what happened. This is useful in larger applications.
<?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 years ago
Be aware that while $previous is quite useful in providing exception chaining and better traceability, none of the internal php exceptions (e.g. PDOException, ReflectionException, etc) are called internally within php with $previous in mind.
So if your code throws an exception, recovers from it, then catches one of these internal php exceptions, recovers from it and throws another exception, you will not know the first exception that was thrown when calling getPrevious.
See: https://bugs.php.net/bug.php?id=63873
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google