استثناها (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 است.

ابزارهای مرتبط