مدیریت استثنا ها (Exception) در PHP

مدیریت استثنا ها (Exception) در PHP

مدیریت خطا (Exception) که در مبحث پی اچ پی به عنوان PHP Exceptions یاد می شود برای مدیریت بروز خطاها و استثناهایی می باشد که در صورت عدم مدیریت آنها موجب شکست و عدم اجرای برنامه خواهد شد. در واقع شما در صورت بروز موارد خاص و استثنایی روند اجرای برنامه را مدیریت می کنید.

در واقع استثنا (Exception) در PHP آبجکت ای است که خطاها و اتفاقات غیر مترقبه را نشان می دهد. استفاده از Exception ها بهترین روش برای متوقف کردن فانکشن در مواقع مواجه شدن با اطلاعات غیر قابل استفاده است.

استفاده از دستور throw برای اجرای یک Exception

دستور throw به یک تابع یا متد تعریف شده توسط کاربر اجازه می دهد تا یک استثنا ایجاد کند. اگر یک استثنا (Exception) شناسایی نشود، یک خطای آسیب زننده (fatal error) با پیام “Uncaught Exception” رخ می دهد. به مثال زیر توجه نمایید.

 <?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero");
  }
  return $dividend / $divisor;
}

echo divide(5, 0);
?> 

در مثال بالا با توجه به این که عدد 5 بر عدد صفر تقسیم می شود و این عمل در ریاضی مساوی با بی نهایت است. پس اسکریپت با خطا مواجه خواهد شد.

دستور try…catch

برای جلوگیری از خطای مثال بالا، می‌توانیم از دستور try…catch برای گرفتن استثناها و ادامه فرآیند استفاده کنیم. مثال زیر نحوه استفاده از این دستور را به خوبی نشان می دهد.

 <?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero");
  }
  return $dividend / $divisor;
}

try {
  echo divide(5, 0);
} catch(Exception $e) {
  echo "Unable to divide.";
}
?> 

در مثال بالا متغیر e حاوی خود exception می باشد. می توانید برای مشاهده exception (جهت تمرین) این متغیر را echo کنید. خواهید دید که ارور موجود در اسکریپت را به شما نشان خواهد داد.

دستور try…catch…finally

دستور try…catch…finally را می توان برای مدیریت استثناها (Exceptions) استفاده کرد. کد موجود در بخش finally همیشه بدون در نظر گرفتن اینکه آیا استثنا گرفته شده است یا نه اجرا می شود. در صورت استفاده از قسمت finally، استفاده از قسمت catch اختیاری خواهد بود. به مثال زیر توجه نمایید.

 <?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero");
  }
  return $dividend / $divisor;
}

try {
  echo divide(5, 0);
} catch(Exception $e) {
  echo "Unable to divide. ";
} finally {
  echo "Process complete.";
}
?> 

استفاده از Exception Object

با استفاده از object مربوط به استثنا ها (exception) می توان نمایش خطاها را به راحتی مدیریت کرد. در واقع این object حاوی اطلاعاتی در مورد خطای موجود در صفحه می باشد. به مثال زیر توجه نمایید.

 <?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero", 1);
  }
  return $dividend / $divisor;
}

try {
  echo divide(5, 0);
} catch(Exception $ex) {
  $code = $ex->getCode();
  $message = $ex->getMessage();
  $file = $ex->getFile();
  $line = $ex->getLine();
  echo "Exception thrown in $file on line $line: [Code $code]
  $message";
}
?> 

getFile(): مسیر کامل فایلی که استثنا در آن ایجاد شده را برمی گرداند.

getLine(): شماره خط کدی را که استثنا را ایجاد کرده است را بر می‌گرداند.

getMessage(): حاوی اطلاعاتی است که توضیح می دهد چرا استثنا ایجاد شده است.

getCode(): حاوی کد استثنا می باشد.

دیدگاهتان را بنویسید