استثناهای چندگانه
برای یک اسکریبت این امکان وجود دارد که به ازای اتفاق افتادن شرط های متفاوت، استثناهای متفاوت با بلاک های catch متفاوت را تعریف کنیم.
مثال:
<?php
class customException extends Exception
{
public function errorMessage()
{
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "
try
{
// style="font-family: Courier New;">اگر ایمیل معتبر نباشد، استثنا راه اندازی می شود
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
{
throw new customException($email);
}
// style="font-family: Courier New;">اگر در آدرس ایمیل کلمه مشخص شده وجود داشت، استثنا راه اندازی می شود
if(strpos($email, "example") !== FALSE)
{
throw new Exception("$email is an example e-mail");
}
}
catch (customException $e)
{
echo $e->errorMessage();
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>
خروجی کد بالا:
توضیح مثال:
- متغییر email$ با یک آدرس ایمیل معتبر تنظیم می شود، اما شامل رشته ی "example" است.
- چون متغییر تعریف شده حاوی رشته ی "example" است? استثنا دوم در بلاک try راه اندازی می شود.
- بلاک catch دوم استثنا را می گیرد و خطای مناسب را برمی گرداند.
نکته: اگر استثنای بوجود آمده، بلاک catch خود را نیابد، شروع به جستجوی یک بلاک catch دیگر در "سطوح بالاتر" خواهد کرد.




