استثناهای چندگانه

برای یک اسکریبت این امکان وجود دارد که به ازای اتفاق افتادن شرط های متفاوت، استثناهای متفاوت با بلاک های 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 = "این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید";

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();
  }
?>

خروجی کد بالا:

این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید is an example e-mail

توضیح مثال:

  1. متغییر email$ با یک آدرس ایمیل معتبر تنظیم می شود، اما شامل رشته ی "example" است.
  2. چون متغییر تعریف شده حاوی رشته ی "example" است? استثنا دوم در بلاک try راه اندازی می شود.
  3.  بلاک catch دوم استثنا را می گیرد و خطای مناسب را برمی گرداند.

نکته: اگر استثنای بوجود آمده، بلاک catch خود را نیابد، شروع به جستجوی یک بلاک catch دیگر در "سطوح بالاتر" خواهد کرد.


آموزش های مرتبط

آموزش PHP-بررسی استثناها