try/catch کردن کار درستی نیست!یکی از اشتباهات رایج در PHP اینه که هر جا احتمال خطا وجود داشت، سریع بنویسیم:
try {
$user = createUser($data);
} catch (Exception $e) {
return false;
}مشکل اینجاست که با این کار ممکنه اطلاعات مهم خطا رو نابود کنیم.
مثلاً:
function createUser(array $data): bool
{
try {
// Database operation...
return true;
} catch (Throwable $e) {
return false;
}
}
حالا لایهی بالاتر فقط میفهمه:
false
اما نمیدونه:
* Database مشکل داشته؟
* Validation شکست خورده؟
* Unique constraint نقض شده؟
* Connection قطع شده؟
* Bug واقعی اتفاق افتاده؟
راه بهتر 👇
اگر این لایه نمیتونه خطا رو واقعاً مدیریت کنه، معمولاً بهتره Exception رو بگیری و بیدلیل خفهاش نکنی:
function createUser(array $data): User
{
// اگر خطایی رخ دهد، Exception به caller منتقل میشود
return User::create($data);
}
بعد در لایهای که واقعاً میتونه تصمیم بگیره، مدیریت کن:
try {
$user = createUser($data);
return response()->json($user);
} catch (Throwable $e) {
logger()->error($e->getMessage());
return response()->json([
'message' => 'Something went wrong'
], 500);
}اینجا Exception در مرز مناسب مدیریت شده؛ هم کاربر پیام مناسب میگیره، هم خطای واقعی برای Debug باقی میمونه.
⚠️ یک تفاوت مهم
Exception برای اتفاقات قابل مدیریت مناسبه.
اما این کار:
catch (Throwable $e) {
return false;
}میتونه یک Bug واقعی برنامه رو هم پنهان کنه.
یعنی:
Real Error
↓
catch
↓
false
↓
برنامه ادامه پیدا میکند
↓
Debugging nightmare 💀
🔥 قاعده حرفهای:
مبحث Exception را فقط جایی Catch کن که واقعاً میدانی با آن چه کار کنی.
اگر فقط قرار است بگیری، false برگردانی و اطلاعات خطا را دور بریزی، احتمالاً Catch کردن در آن لایه تصمیم درستی نیست.
موضوع Error handling خوب یعنی خطا را پنهان نکنی؛ در لایهی درست، آن را مدیریت کنی.
@CodeVerse_dev