PHP – استثنائات (Exceptions)
PHP و استثنائات
استثناء (Exception) در PHP، شیئی است که برای توصیف یک خطا یا رفتار غیرمنتظره در اسکریپت PHP استفاده میشود. استثنائات میتوانند توسط بسیاری از توابع و کلاسهای PHP پرتاب شوند و همچنین توابع و کلاسهای تعریف شده توسط کاربر نیز میتوانند استثنائات را پرتاب کنند.
استفاده از استثنائات راه خوبی برای متوقف کردن یک تابع است وقتی که با دادههایی مواجه میشود که نمیتواند از آنها استفاده کند.
پرتاب یک استثناء
بیان throw
به یک تابع یا متد اجازه میدهد که یک استثنا را پرتاب کند. زمانی که یک استثنا پرتاب میشود، کد بعد از آن اجرا نخواهد شد.
اگر استثنا به درستی مدیریت نشود، یک خطای کشف نشده (Uncaught Exception) به وقوع میپیوندد.
مثال: پرتاب استثنا بدون مدیریت
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
echo divide(5, 0);
?>
خروجی:
دستور try...catch
برای جلوگیری از خطاهای مثال بالا، میتوانیم از دستور try...catch
استفاده کنیم تا استثنائات را مدیریت کرده و فرآیند را ادامه دهیم.
سینتکس:
try {
// کدی که ممکن است استثنا پرتاب کند
} catch(Exception $e) {
// کدی که هنگام برخورد با استثنا اجرا میشود
}
مثال: نمایش پیام هنگام پرتاب استثنا
<?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.";
}
?>
در بلوک catch
مشخص میشود که چه نوع استثنایی باید مدیریت شود و نام متغیری که میتواند برای دسترسی به استثنا استفاده شود. در مثال بالا، نوع استثنا Exception
و نام متغیر $e
است.
دستور try...catch...finally
دستور try...catch...finally
برای مدیریت استثنائات استفاده میشود. کد در بلوک finally
همیشه اجرا میشود، چه استثنا کشف شده باشد یا خیر. اگر finally
موجود باشد، بلوک catch
اختیاری است.
سینتکس:
try {
// کدی که ممکن است استثنا پرتاب کند
} catch(Exception $e) {
// کدی که هنگام برخورد با استثنا اجرا میشود
} finally {
// کدی که همیشه اجرا میشود
}
مثال: نمایش پیام هنگام پرتاب استثنا و سپس نمایش پایان فرآیند
<?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.";
}
?>
مثال: خروجی رشته حتی اگر استثنا کشف نشود
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} finally {
echo "Process complete.";
}
?>
شیء استثنا (Exception Object)
شیء استثنا حاوی اطلاعاتی درباره خطا یا رفتار غیرمنتظرهای است که تابع با آن مواجه شده است.
سینتکس:
new Exception(message, code, previous)
پارامترها:
- message: (اختیاری) رشتهای که توضیح میدهد چرا استثنا پرتاب شده است.
- code: (اختیاری) عدد صحیحی که میتواند برای تمایز این استثنا از دیگر استثنائات از همان نوع استفاده شود.
- previous: (اختیاری) اگر این استثنا در یک بلوک
catch
دیگر پرتاب شده باشد، توصیه میشود که آن استثنا را به این پارامتر ارسال کنید.
روشها:
زمانی که استثنا را مدیریت میکنید، میتوانید از متدهای زیر برای دریافت اطلاعات درباره استثنا استفاده کنید:
- getMessage(): رشتهای را برمیگرداند که توضیح میدهد چرا استثنا پرتاب شده است.
- getPrevious(): اگر این استثنا توسط استثنای دیگری ایجاد شده باشد، این متد استثنای قبلی را برمیگرداند. در غیر این صورت،
null
برمیگرداند. - getCode(): کد استثنا را برمیگرداند.
- getFile(): مسیر کامل فایلی که در آن استثنا پرتاب شده را برمیگرداند.
- getLine(): شماره خط کدی که استثنا را پرتاب کرده است، برمیگرداند.
مثال: خروجی اطلاعات درباره استثنا پرتاب شده
<?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";
}
?>
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام