همه چیز درباره استثناها در PHP

php exceptions handling
20 آبان 1403

استفاده از استثناها (Exception) در زبان PHP یکی از مهم‌ترین نیزابزارهایی است که به برنامه‌نویسان امکان مدیریت خطاها را می‌دهد. در گذشته، برنامه‌نویسان به‌طور عمده از توابع پیش‌فرض PHP مانند die() و error_log() برای مدیریت خطاها استفاده می‌کردند. با این حال، این روش‌ها امکانات کافی برای مدیریت انواع مختلف خطاها و ارائه اطلاعات مفهومی به کاربر نهایی را فراهم نمی‌کردند.

با معرفی استثناها در PHP 5، از روش‌های سنتی مدیریت خطا به سوی استفاده از مفهوم استثناها حرکت کردیم. این تحول به برنامه‌نویسان اجازه می‌دهد که خطاها را به شکلی ساخت‌یافته‌تر و قابل درک‌تر مدیریت کنند. زمانی که یک خطا رخ می‌دهد، برنامه‌نویس می‌تواند اقدام به پرتاب (throw) یک استثنا کرده و آن را در جای دیگر کد گیر بیاورد (catch) تا به شکلی مناسب با آن برخورد شود.

کلاس‌های استثنا در PHP انعطاف بالایی دارند و شما می‌توانید استثناهای خاص خود را با ارث‌بری از کلاس پایه Exception ایجاد کنید. با این رویکرد، شما قادر به تعریف جزئیات بیشتری مثل پیام خاص و کد خطا خواهید بود که اطلاعات بیشتر و بهتری را هنگام وقوع خطا در اختیار قرار می‌دهد.

بیایید نگاهی دقیق‌تر به یک مثال واقعی از مدیریت استثناها در PHP بیندازیم. در این مثال، یک تلاش برای تقسیم یک عدد بر صفر را داریم که می‌تواند منجر به یک خطای محاسباتی شود. با استفاده از استثناها، می‌توانیم با این مسئله با سادگی و دقت بیشتری برخورد کنیم.


<?php

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

try {
    echo divide(10, 0);
} catch (Exception $e) {
    echo "Caught exception: ",  $e->getMessage();
}

?>

توضیح خط به خط کد

function divide($dividend, $divisor): این تابع دو پارامتر ورودی برای تقسیم گرفتن می‌پذیرد.

if($divisor == 0): بررسی می‌کند که آیا مخرج صفر است یا خیر.

throw new Exception("Division by zero."): در صورتی که مخرج صفر باشد، استثنای جدیدی با پیام "Division by zero." پرتاب می‌کند.

return $dividend / $divisor: اگر مخرج صفر نبود، نتیجه تقسیم را بازمی‌گرداند.

try {: بلوک تلاش برای اجرای تابع تقسیم.

catch (Exception $e): بدام انداختن هرگونه استثنایی که در بلوک try پرتاب شده است.

echo "Caught exception: ", $e->getMessage(): پیامی را به کاربر نمایش می‌دهد که شامل پیام استثنا است.

سوالات متداول

؟

چطور از استثناها در PHP استفاده کنیم؟

؟

استفاده از استثناها چه مزیتی دارد؟

؟

آیا استثناها تفاوتی با خطاها دارند؟