استفاده اصلی از استثناها

زمانی که یک استثنا راه اندازی می شود، اجرای کدهای بعد از آن متوقف شده و php سعی به پیدا کردن بلاک تطابقی استثنای مذکور که catch نامیده می شود، خواهد کرد. به زبان ساده تر بعد از بروز خطا و راه اندازی استثنا، ادامه اجرای اسکریبت در یک بلاک که catch نامیده می شود، گرفتار می شود.

نکته: اگر php برای یک استثنا بلاک تطابقی آنرا نیابد، یک fatal error یا خطای مهلک، همراه با پیغام "Uncaught Exception" صادر خواهد شد.

مثال: در این مثال تابع "checkNum" بررسی می کند، اگر پارامتر ورودی آن بزرگتر از "1" بود استثنا راه اندازی شود، البته توجه داشته باشید که استثنای تعریف شده بدون Catch است:

<?php
function checkNum($number)
  {
  if($number>1)
    {
    throw new Exception("Value must be 1 or below");
    }
  return true;
  }

checkNum(2);
?>

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

Fatal error: Uncaught exception 'Exception'
with message 'Value must be 1 or below' in C:\webfolder\test.php:6
Stack trace: #0 C:\webfolder\test.php(12):
checkNum(28) #1 {main} thrown in C:\webfolder\test.php on line 6

راه اندازی استثنا همراه با بلاک های try و catch

در مثال بالا برای مدیریت بهتر خطا، ما به یک کد مناسب برای بررسی کردن استثنا نیاز داریم که می تواند شامل بخش های زیر باشد:

  1. بلاک try: تابعی که یک استثنا را استفاده می کند باید در بلاک "try" باشد. (اگر استثنا راه اندازی نشود، کد داخل این بلاک به طور معمول، ادامه خواهد یافت اما اگر شرط استثنا برقرار شود استثنا اجرا خواهد شد)
  2. راه انداز یا پرتاب استثنا(throw): یعنی چه طور یک استثنا را راه اندازی شود. هر "throw" باید حداقل یک "catch" داشته باشد.
  3. بلاک catch: اگر استثانی پرتاب شود، بلاک "catch" آنرا می گیرد و یک شیء شامل اطلاعات استثنا ایجاد می کند.

مثال:

<?php
function checkNum($number)
  {
  if($number>1)
    {
    throw new Exception("Value must be 1 or below");
    }
  return true;
  }

try
  {
  checkNum(2);
  //اگر استثنا راه اندازی بشود، خط بعدی اجرا نخواهد شد
  echo 'If you see this, the number is 1 or below';
  }

catch(Exception $e)
  {
  echo 'Message: ' .$e->getMessage();
  }
?>

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

Message: Value must be 1 or below

توضیح مثال بالا:

  1. تابع ()checkNum بررسی می کند که آیا پارامتر ورودی آن بزرگتر از 1 است. اگر بزرگتر باشد یک استثنا پرتاب می شود.
  2. تابع ()checkNum در بلاک "try" فراخوانی می شود
  3. بلاک "catch" استثناهای پرتاب شده را می گیرد و یک شیء (e$) شامل اطلاعات استثنا ایجاد می کند.
  4. پیغام خطای استثنا، با فراخوانی تابع ()getMessage از شیء (e$) تولید می شود.

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

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