استثناها (Exceptions)
مدیریت خطاها با try/catch/finally — روش حرفهای برای کنترل خطا در PHP
استثنا (Exception) چیست؟
استثنا (Exception) یک شیء خطای خاص است که وقتی مشکلی پیش میآید «پرتاب» (throw) میشود. میتوانید آن را «بگیرید» (catch) و مدیریت کنید.
ساختار try...catch
<?php
try {
// کدی که ممکن است خطا دهد
$result = 10 / 0;
} catch (Exception $e) {
// مدیریت خطا
echo "خطا: " . $e->getMessage();
}
?>
پرتاب استثنا — throw
<?php
function divide($a, $b) {
if ($b === 0) {
throw new Exception("تقسیم بر صفر مجاز نیست!");
}
return $a / $b;
}
try {
echo divide(10, 0);
} catch (Exception $e) {
echo "خطا: " . $e->getMessage();
}
// خروجی: خطا: تقسیم بر صفر مجاز نیست!
?>
بخش finally
finally همیشه اجرا میشود — چه خطا باشد چه نباشد:
<?php
try {
$file = fopen("data.txt", "r");
// کار با فایل
} catch (Exception $e) {
echo "خطا: " . $e->getMessage();
} finally {
// همیشه اجرا میشود
if (isset($file)) fclose($file);
echo "پاکسازی انجام شد.";
}
?>
چند catch
<?php
try {
// ...
} catch (InvalidArgumentException $e) {
echo "آرگومان نامعتبر";
} catch (RuntimeException $e) {
echo "خطای اجرا";
} catch (Exception $e) {
echo "خطای عمومی";
}
?>
متدهای Exception
| متد | توضیح |
|---|---|
getMessage() | پیام خطا |
getCode() | کد خطا |
getFile() | فایلی که خطا در آن رخ داده |
getLine() | شماره خط |
getTrace() | جزئیات کامل |
ساخت Exception سفارشی
<?php
class AgeException extends Exception {
public function __construct($age) {
parent::__construct("سن نامعتبر: $age");
}
}
function checkAge($age) {
if ($age < 0 || $age > 150) {
throw new AgeException($age);
}
return "سن معتبر است.";
}
try {
echo checkAge(200);
} catch (AgeException $e) {
echo "خطای سفارشی: " . $e->getMessage();
}
?>
این مبحث بخشی از دوره آموزش کامل PHP است.