وقتی یک برنامه PHP اجرا میشود، همیشه همه چیز طبق انتظار پیش نمیرود. ممکن است فایل موردنظر پیدا نشود، اتصال به Database با مشکل مواجه شود، اطلاعات ورودی کاربر نامعتبر باشد یا یک عملیات خاص در شرایطی انجام شود که برنامه برای آن آماده نیست.
در چنین شرایطی، مدیریت خطا در PHP اهمیت زیادی پیدا میکند.
یکی از مهمترین ابزارهایی که PHP برای مدیریت شرایط غیرعادی در اختیار برنامهنویس قرار میدهد، Exception است.
با استفاده از Exception میتوانیم خطاها و شرایط غیرمنتظره را به شکل کنترلشده مدیریت کنیم و به جای اینکه برنامه به صورت نامناسب متوقف شود، رفتار مشخصی برای آن تعریف کنیم.
در این آموزش با مفهوم Exception در PHP، ساختار try و catch، دستور throw، بخش finally، کلاس Exception، Throwable و نحوه ساخت Exceptionهای اختصاصی آشنا میشویم.
# Exception در PHP چیست؟
Exception یا «استثنا» روشی برای نشان دادن یک وضعیت غیرعادی در زمان اجرای برنامه است.
فرض کنید یک سرویس پرداخت در Application شما اجرا میشود. ممکن است به دلایلی مانند خطای ارتباط با درگاه یا نامعتبر بودن اطلاعات، عملیات پرداخت موفق نباشد.
به جای اینکه فقط یک پیام خطای نامشخص نمایش دهیم، میتوانیم یک Exception ایجاد کنیم:
throw new Exception('Payment failed');
سپس این Exception را در قسمت دیگری از برنامه مدیریت کنیم.
ساختار کلی:
try {
// Code that may throw an exception
} catch (Exception $e) {
// Handle exception
}
# چرا باید از Exception استفاده کنیم؟
بدون مدیریت مناسب خطا، ممکن است برنامه رفتار غیرقابل پیشبینی داشته باشد.
Exception کمک میکند:
- خطاها را کنترل کنیم.
- کد مربوط به مدیریت خطا را از منطق اصلی جدا کنیم.
- پیام مناسب به کاربر نمایش دهیم.
- خطا را در Log ذخیره کنیم.
- عملیات ناموفق را مدیریت کنیم.
- Exceptionهای مختلف را از یکدیگر تفکیک کنیم.
- در پروژههای بزرگتر ساختار قابل نگهداریتری داشته باشیم.
# ساختار try و catch در PHP
سادهترین ساختار Exception به شکل زیر است:
try {
throw new Exception('Something went wrong');
} catch (Exception $e) {
echo $e->getMessage();
}
در این مثال:
- کد داخل
tryاجرا میشود. - یک Exception ایجاد میکنیم.
- اجرای بخش
tryمتوقف میشود. - کنترل به
catchمنتقل میشود. - پیام Exception نمایش داده میشود.
خروجی:
Something went wrong
# try در PHP چیست؟
بلوک try محلی است که کدی را در آن قرار میدهیم که احتمال دارد Exception ایجاد کند.
مثلاً:
try {
$result = $a / $b;
}
اگر عملیاتی که داخل این بخش قرار دارد Exception ایجاد کند، میتوانیم آن را با catch مدیریت کنیم.
# catch در PHP چیست؟
بلوک catch برای دریافت و مدیریت Exception استفاده میشود.
مثلاً:
try {
throw new Exception('Database connection failed');
} catch (Exception $e) {
echo $e->getMessage();
}
متغیر $e نمونهای از Exception دریافتشده است.
# متد getMessage در Exception
برای دریافت پیام Exception:
$e->getMessage();
مثلاً:
try {
throw new Exception('User not found');
} catch (Exception $e) {
echo $e->getMessage();
}
خروجی:
User not found
# getCode در Exception
Exception میتواند یک Code نیز داشته باشد.
مثلاً:
throw new Exception('User not found', 404);
سپس:
try {
throw new Exception('User not found', 404);
} catch (Exception $e) {
echo $e->getCode();
}
خروجی:
404
است.
# getFile و getLine
Exception اطلاعات بیشتری نیز در اختیار ما قرار میدهد.
برای دریافت مسیر فایل:
$e->getFile();
و برای دریافت شماره خط:
$e->getLine();
مثلاً:
catch (Exception $e) {
echo $e->getFile();
echo $e->getLine();
}
این اطلاعات برای Debugging بسیار کاربردی هستند.
# getTrace در Exception
برای دریافت Trace مربوط به Exception:
$trace = $e->getTrace();
و برای دریافت Trace به صورت رشته:
$trace = $e->getTraceAsString();
این اطلاعات برای پیدا کردن مسیر اجرای کد و عیبیابی خطاها بسیار مفید هستند.
# دستور throw در PHP چیست؟
برای ایجاد یا پرتاب Exception از throw استفاده میشود.
مثلاً:
throw new Exception('Invalid operation');
یک مثال واقعیتر:
function divide(int $a, int $b): float
{
if ($b === 0) {
throw new Exception('Cannot divide by zero');
}
return $a / $b;
}
حالا:
try {
echo divide(10, 0);
} catch (Exception $e) {
echo $e->getMessage();
}
# Exception و اعتبارسنجی ورودی
یکی از کاربردهای Exception بررسی شرایط نامعتبر است.
مثلاً:
function withdraw(float $balance, float $amount): float
{
if ($amount <= 0) {
throw new Exception('Invalid amount');
}
if ($amount > $balance) {
throw new Exception('Insufficient balance');
}
return $balance - $amount;
}
استفاده:
try {
$balance = withdraw(100000, 150000);
echo $balance;
} catch (Exception $e) {
echo $e->getMessage();
}
در یک پروژه واقعی بهتر است برای خطاهای مختلف Exceptionهای اختصاصی تعریف کنیم.
# finally در PHP چیست؟
علاوه بر try و catch میتوان از finally نیز استفاده کرد.
ساختار:
try {
// Code
} catch (Exception $e) {
// Handle exception
} finally {
// Always execute
}
مثلاً:
try {
echo 'Start';
} catch (Exception $e) {
echo 'Error';
} finally {
echo 'Finish';
}
finally برای عملیات Cleanup کاربرد زیادی دارد.
# کاربرد finally
فرض کنید یک Resource را باز کردهایم و چه عملیات موفق شود و چه Exception رخ دهد، باید آن را آزاد کنیم.
مثلاً:
$handle = null;
try {
$handle = fopen('data.txt', 'r');
// Process file
} catch (Exception $e) {
echo $e->getMessage();
} finally {
if (is_resource($handle)) {
fclose($handle);
}
}
البته در کدهای مدرن PHP و کتابخانههای مختلف، مدیریت Resource ممکن است روشهای متفاوتی داشته باشد.
# چند catch در PHP
میتوان چند نوع Exception را به صورت جداگانه مدیریت کرد.
try {
// Code
} catch (InvalidArgumentException $e) {
echo 'Invalid argument';
} catch (RuntimeException $e) {
echo 'Runtime error';
} catch (Exception $e) {
echo 'General exception';
}
این روش زمانی کاربرد دارد که Exceptionهای مختلف رفتار متفاوتی داشته باشند.
# Exceptionهای اختصاصی در PHP
در پروژههای بزرگ، استفاده از یک Exception عمومی برای همه شرایط معمولاً مناسب نیست.
میتوانیم Exception اختصاصی ایجاد کنیم.
مثلاً:
class PaymentException extends Exception
{
}
سپس:
throw new PaymentException('Payment failed');
و:
try {
throw new PaymentException('Payment failed');
} catch (PaymentException $e) {
echo $e->getMessage();
}
این کار باعث میشود نوع خطا مشخصتر باشد.
# ساخت Custom Exception
یک مثال کاملتر:
class InsufficientBalanceException extends Exception
{
}
function buy(float $balance, float $price): void
{
if ($balance < $price) {
throw new InsufficientBalanceException(
'Insufficient balance'
);
}
echo 'Purchase successful';
}
سپس:
try {
buy(100000, 200000);
} catch (InsufficientBalanceException $e) {
echo $e->getMessage();
}
این الگو در Applicationهای واقعی بسیار کاربردی است.
# Exception Hierarchy در PHP
Exceptionها در PHP دارای ساختار سلسلهمراتبی هستند.
یکی از کلاسهای اصلی:
Throwable
است.
از Throwable، دو شاخه مهم داریم:
Throwable
├── Error
└── Exception
بنابراین:
Exceptionبرای بسیاری از شرایط قابل مدیریت Application استفاده میشود.Errorبرای خطاهای سطح زبان/runtime استفاده میشود.ThrowableInterface مشترک هر دو است.
# Throwable در PHP چیست؟
Throwable یک Interface است که توسط Error و Exception پیادهسازی میشود.
به همین دلیل میتوان در شرایطی که میخواهیم هم Exception و هم Errorهای قابلگرفتن را مدیریت کنیم، از آن استفاده کرد:
try {
// Code
} catch (Throwable $e) {
echo $e->getMessage();
}
این موضوع در Error Handling حرفهای اهمیت زیادی دارد.
# تفاوت Exception و Error در PHP
این دو مفهوم دقیقاً یکسان نیستند.
Exception
معمولاً برای شرایطی استفاده میشود که Application بتواند آنها را مدیریت کند.
مثلاً:
User not found
Payment failed
Invalid input
File not found
Error
معمولاً به خطاهای سطح پایینتر مربوط میشود.
برای مثال:
TypeError
ArgumentCountError
البته در PHP مدرن بسیاری از این خطاها نیز Throwable هستند و در صورت نیاز میتوان آنها را مدیریت کرد.
# TypeError در PHP
مثلاً:
function add(int $a, int $b): int
{
return $a + $b;
}
add('hello', 10);
بسته به وضعیت Type System و نحوه اجرای PHP، ممکن است TypeError ایجاد شود.
میتوان آن را با Throwable دریافت کرد:
try {
add('hello', 10);
} catch (TypeError $e) {
echo $e->getMessage();
}
# Exception Handling در توابع
میتوان Exception را داخل یک Function ایجاد و خارج از آن مدیریت کرد.
function findUser(int $id): array
{
if ($id <= 0) {
throw new InvalidArgumentException(
'Invalid user ID'
);
}
return [
'id' => $id,
'name' => 'Ali'
];
}
و:
try {
$user = findUser(0);
} catch (InvalidArgumentException $e) {
echo $e->getMessage();
}
این الگو باعث میشود Function مسئولیت مدیریت شرایط نامعتبر خودش را داشته باشد، در حالی که تصمیم درباره نحوه نمایش یا ثبت خطا میتواند در لایه بالاتر انجام شود.
# انتقال Exception بین لایههای Application
در Applicationهای بزرگ ممکن است معماری شما شامل بخشهایی مانند:
Controller
Service
Repository
Database
باشد.
مثلاً Repository یک Exception ایجاد میکند:
throw new RuntimeException('Database operation failed');
Service میتواند آن را دریافت یا به Exception مناسبتری تبدیل کند.
در نهایت Controller یا لایه بالاتر میتواند پاسخ مناسب را تولید کند.
این روش به جداسازی مسئولیتها کمک میکند.
# Exception Chaining در PHP
گاهی لازم است Exception اصلی را حفظ کنیم اما یک Exception جدید با مفهوم بالاتر ایجاد کنیم.
مثلاً:
try {
// Database operation
} catch (Throwable $e) {
throw new RuntimeException(
'Unable to load user',
0,
$e
);
}
در اینجا Exception قبلی به عنوان previous ذخیره شده است.
میتوانیم آن را دریافت کنیم:
$previous = $e->getPrevious();
این قابلیت برای حفظ علت اصلی خطا بسیار مفید است.
# ساخت Exception با Previous Exception
مثال:
try {
throw new Exception('Database connection failed');
} catch (Exception $e) {
throw new RuntimeException(
'Unable to load user',
0,
$e
);
}
در این حالت میتوانیم Exception سطح بالاتر را با علت اصلی آن همراه کنیم.
# آیا باید همه Exceptionها را catch کنیم؟
خیر.
یکی از اشتباهات رایج این است که برنامهنویس تمام کدها را داخل:
try {
}
catch (Throwable $e) {
}
قرار دهد.
این کار میتواند باعث شود مشکلات واقعی Application پنهان شوند.
مثلاً:
try {
// Everything
} catch (Throwable $e) {
// Ignore
}
این الگو بسیار خطرناک است.
اگر Exception را دریافت میکنید، باید تصمیم مشخصی درباره آن داشته باشید:
- Log شود.
- به کاربر پاسخ مناسب داده شود.
- Retry شود.
- به Exception دیگری تبدیل شود.
- یا در سطح بالاتر مدیریت شود.
# چرا نباید Exception را نادیده بگیریم؟
این کد را در نظر بگیرید:
try {
processPayment();
} catch (Throwable $e) {
}
اگر processPayment() شکست بخورد، هیچ اطلاعاتی ثبت نمیشود و Application ممکن است ادامه پیدا کند؛ در حالی که عملیات اصلی انجام نشده است.
بهتر است حداقل خطا ثبت یا به شکل مناسبی مدیریت شود.
# Logging Exception
در Application واقعی معمولاً نباید Stack Trace و جزئیات فنی Exception را مستقیماً به کاربر نمایش دهیم.
بهتر است اطلاعات فنی در Log ذخیره شود.
مثلاً:
try {
processPayment();
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'An unexpected error occurred.';
}
در Frameworkهایی مانند Laravel سیستم Logging پیشرفتهتری در اختیار شما قرار میگیرد.
# نمایش پیام Exception به کاربر
در محیط Development میتوان جزئیات بیشتری نمایش داد.
اما در Production بهتر است پیامهای داخلی مانند:
Database password incorrect
SQL connection failed
/path/to/project/.env
به کاربر نمایش داده نشوند.
به جای آن:
خطایی در پردازش درخواست رخ داد.
نمایش داده شود و جزئیات در Log ذخیره شود.
# Exception و امنیت
مدیریت Exception فقط مسئله برنامهنویسی نیست؛ موضوع امنیت نیز هست.
نمایش مستقیم Exception میتواند اطلاعات حساسی درباره Application در اختیار مهاجم قرار دهد.
برای مثال:
/var/www/project/app/Services/PaymentService.php
یا:
SQLSTATE[...]
ممکن است اطلاعاتی درباره ساختار داخلی سیستم آشکار کند.
بنابراین:
Development
جزئیات بیشتر برای Debugging.
Production
پیام عمومی برای کاربر + اطلاعات کامل در Log امن.
# Exception و API
در APIها بهتر است Exception به Response مناسب تبدیل شود.
مثلاً اگر کاربر وجود نداشته باشد:
{
"message": "User not found"
}
و HTTP Status Code مناسب مانند:
404
برگردانده شود.
برای خطای Validation نیز ممکن است:
422
مناسب باشد.
در Frameworkهایی مانند Laravel این فرآیند امکانات بسیار بیشتری دارد.
# مثال: مدیریت Exception در یک API ساده
try {
$user = findUser($id);
echo json_encode([
'success' => true,
'data' => $user
]);
} catch (InvalidArgumentException $e) {
http_response_code(422);
echo json_encode([
'success' => false,
'message' => $e->getMessage()
]);
} catch (Throwable $e) {
error_log($e->getMessage());
http_response_code(500);
echo json_encode([
'success' => false,
'message' => 'Internal server error'
]);
}
در اینجا خطاهای قابل پیشبینی و خطاهای عمومی را از هم جدا کردهایم.
# Exception در PHP و Database
فرض کنید عملیات Database انجام میدهیم:
try {
$pdo->beginTransaction();
// Database operations
$pdo->commit();
} catch (Throwable $e) {
if ($pdo->inTransaction()) {
$pdo->rollBack();
}
throw $e;
}
این الگو نشان میدهد Exception چگونه میتواند در مدیریت Transaction نیز کاربرد داشته باشد.
در پروژههای حرفهای، بهتر است Transaction و Error Handling بر اساس معماری Application و امکانات Database/Framework طراحی شوند.
# Exception و Transaction
یکی از کاربردهای مهم Exception در سیستمهای مالی، فروشگاهی و Marketplace مدیریت Transaction است.
مثلاً:
Start Transaction
↓
Create Order
↓
Decrease Stock
↓
Create Payment
↓
Exception?
↙ ↘
Yes No
↓ ↓
Rollback Commit
اگر یکی از عملیات اصلی شکست بخورد، میتوان Transaction را Rollback کرد.
این موضوع در پروژههای Laravel و سیستمهای فروشگاهی اهمیت بسیار زیادی دارد.
# تفاوت Error Handling و Exception Handling
این دو اصطلاح نزدیک به هم هستند اما دقیقاً یکی نیستند.
Error Handling مفهوم گستردهای برای مدیریت خطاهای Application است.
Exception Handling یکی از روشهای مدیریت شرایط غیرعادی با استفاده از Exception است.
در PHP علاوه بر Exception، مکانیزمهای دیگری مانند Error و سیستم Error Handler نیز وجود دارند.
# set_error_handler در PHP
PHP امکان تعریف Error Handler اختصاصی را نیز فراهم میکند:
set_error_handler(function (
int $severity,
string $message,
string $file,
int $line
) {
echo $message;
});
این مکانیزم با Exception Handling یکسان نیست.
برای پروژههای جدید، باید با توجه به نوع Error و نیاز Application تصمیم بگیریم که از Error Handler، Exception یا هر دو استفاده کنیم.
# تبدیل Error به Exception
در برخی سناریوها میتوان Errorهای معمول PHP را به Exception تبدیل کرد.
مثلاً:
set_error_handler(
function (
int $severity,
string $message,
string $file,
int $line
) {
throw new ErrorException(
$message,
0,
$severity,
$file,
$line
);
}
);
این روش باید با دقت استفاده شود و نباید بدون شناخت رفتار Error Handler در کل Application فعال شود.
# بهترین روش استفاده از Exception در PHP
برای پروژههای حرفهای چند اصل مهم را رعایت کنید.
۱. Exception را برای شرایط استثنایی استفاده کنید
Exception نباید جایگزین همه Validationهای عادی شود.
۲. Exceptionهای معنیدار بسازید
به جای یک Exception عمومی برای همه چیز، در بخشهای مهم Application Exceptionهای اختصاصی تعریف کنید.
۳. Exception را بیدلیل catch نکنید
اگر نمیتوانید کاری با Exception انجام دهید، ممکن است بهتر باشد آن را به لایه بالاتر منتقل کنید.
۴. اطلاعات حساس را نمایش ندهید
Stack Trace و اطلاعات داخلی Server برای کاربر Production مناسب نیست.
۵. Exceptionها را Log کنید
خطاهای مهم باید برای بررسیهای بعدی قابل پیگیری باشند.
۶. علت اصلی خطا را حفظ کنید
در صورت تبدیل Exception از Previous Exception استفاده کنید.
۷. مسئولیتها را جدا کنید
Business Logic نباید بیش از حد درگیر نحوه نمایش خطا شود.
# یک مثال کاملتر از Exception Handling
class UserNotFoundException extends RuntimeException
{
}
class UserService
{
public function findUser(int $id): array
{
if ($id <= 0) {
throw new InvalidArgumentException(
'Invalid user ID'
);
}
$user = null;
if ($user === null) {
throw new UserNotFoundException(
'User not found'
);
}
return $user;
}
}
استفاده:
$service = new UserService();
try {
$user = $service->findUser(10);
} catch (UserNotFoundException $e) {
echo 'User does not exist.';
} catch (InvalidArgumentException $e) {
echo 'Invalid ID.';
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Unexpected error.';
}
این ساختار به مراتب قابل مدیریتتر از یک catch عمومی برای همه شرایط است.
# Exception در PHP 8 و نسخههای جدید
در نسخههای جدید PHP، سیستم Typeها و Errorها قدرتمندتر شده و بسیاری از خطاهای Runtime به صورت Throwable قابل مدیریت هستند.
به همین دلیل در پروژههای مدرن باید تفاوت بین:
Exception
Error
Throwable
را بدانید.
همچنین استفاده از Type Declaration، Return Type و Strict Typeها میتواند بسیاری از خطاها را زودتر مشخص کند.
مثلاً:
declare(strict_types=1);
در ابتدای فایل PHP قرار میگیرد و میتواند رفتار Type Checking را سختگیرانهتر کند.
# اشتباهات رایج در مدیریت Exception
استفاده از catch خالی
catch (Throwable $e) {
}
این کار باعث از دست رفتن اطلاعات خطا میشود.
نمایش مستقیم Exception
echo $e;
در Production میتواند اطلاعات داخلی Application را افشا کند.
استفاده از Exception برای هر شرط ساده
هر شرطی نباید با throw مدیریت شود.
Catch کردن Exception در لایه اشتباه
هر لایه Application باید فقط زمانی Exception را مدیریت کند که واقعاً مسئول تصمیمگیری درباره آن باشد.
مخفی کردن خطا به جای حل کردن آن
Exception Handling نباید به ابزاری برای پنهان کردن Bugها تبدیل شود.
# خلاصه دستورات مهم Exception در PHP
| دستور / کلاس | کاربرد |
|---|---|
try | اجرای کدی که ممکن است Exception ایجاد کند |
catch | دریافت و مدیریت Exception |
throw | ایجاد و پرتاب Exception |
finally | اجرای کد Cleanup |
Exception | کلاس پایه رایج برای Exceptionها |
RuntimeException | Exception مربوط به شرایط Runtime |
InvalidArgumentException | آرگومان نامعتبر |
Error | خطاهای سطح زبان/Runtime |
Throwable | Interface مشترک Error و Exception |
getMessage() | دریافت پیام |
getCode() | دریافت Code |
getFile() | دریافت فایل |
getLine() | دریافت شماره خط |
getTrace() | دریافت Trace |
getPrevious() | دریافت Exception قبلی |
# جمعبندی
Exception در PHP یکی از مهمترین ابزارهای مدیریت شرایط غیرعادی در Applicationهای PHP است.
با استفاده از:
try
catch
throw
finally
میتوانیم جریان اجرای برنامه را در زمان رخ دادن شرایط غیرمنتظره کنترل کنیم.
همچنین با استفاده از Exceptionهای اختصاصی میتوان خطاهای مختلف Application را از یکدیگر تفکیک کرد.
برای مثال در یک پروژه واقعی میتوان Exceptionهای مختلفی مانند:
UserNotFoundException
PaymentException
InsufficientBalanceException
OrderException
AuthorizationException
تعریف کرد.
در پروژههای کوچک ممکن است یک Exception عمومی کافی باشد؛ اما با بزرگتر شدن Application، طراحی درست Exceptionها، Logging، مدیریت خطا و تفکیک مسئولیتها اهمیت بسیار بیشتری پیدا میکند.
نکته مهم این است که Exception Handling به معنی مخفی کردن خطا نیست. هدف این است که خطا را به شکل قابل پیشبینی، قابل پیگیری و امن مدیریت کنیم.
در ادامه مسیر یادگیری PHP، یکی از مباحث مهم Namespace در PHP است. Namespace به ما کمک میکند کلاسها، Interfaceها و سایر اجزای کد را سازماندهی کنیم و از تداخل نامها در پروژههای بزرگ جلوگیری کنیم.
# سوالات متداول
Exception در PHP چیست؟
Exception مکانیزمی برای مدیریت شرایط غیرعادی در زمان اجرای برنامه است که با استفاده از try، catch، throw و finally مدیریت میشود.
try catch در PHP چیست؟
try برای اجرای کدی است که احتمال ایجاد Exception دارد و catch برای دریافت و مدیریت Exception استفاده میشود.
throw در PHP چه کاری انجام میدهد؟
throw برای ایجاد و پرتاب یک Exception استفاده میشود:
throw new Exception('Something went wrong');
finally در PHP چیست؟
finally بخشی از ساختار Exception Handling است که برای اجرای کدهایی مانند Cleanup استفاده میشود و در سناریوهای معمول پس از try یا catch اجرا میشود.
تفاوت Exception و Error در PHP چیست؟
Exception و Error دو شاخه مهم از Throwable هستند. Exception بیشتر برای شرایط قابل مدیریت Application استفاده میشود، در حالی که Error به خطاهای سطح زبان یا Runtime مربوط است.
Throwable در PHP چیست؟
Throwable یک Interface است که توسط Exception و Error پیادهسازی میشود و امکان مدیریت هر دو نوع را فراهم میکند.
آیا میتوان Exception اختصاصی در PHP ساخت؟
بله. میتوان با ارثبری از Exception یا یکی از کلاسهای مناسب آن، Exception اختصاصی ایجاد کرد:
class PaymentException extends RuntimeException
{
}
آیا نمایش پیام Exception به کاربر امن است؟
در محیط Production معمولاً نباید جزئیات فنی Exception، مسیر فایل، Stack Trace یا اطلاعات Database مستقیماً به کاربر نمایش داده شود. بهتر است جزئیات در Log ذخیره و یک پیام عمومی به کاربر نمایش داده شود.
آیا باید تمام Exceptionها را catch کنیم؟
خیر. Exception را باید در لایهای مدیریت کرد که واقعاً مسئول تصمیمگیری درباره آن است. Catch کردن بیدلیل Exception میتواند Bugها را پنهان کند.
# مقالات مرتبط
برای ساخت ساختار لینکسازی داخلی این Cluster، پیشنهاد میشود این مقاله به صفحات زیر لینک شود:
- PHP چیست و چه کاربردی دارد؟
- آموزش PHP از صفر
- ساختار Syntax در PHP
- توابع در PHP
- کار با فایل در PHP
- Namespace در PHP
- Composer چیست؟
- Autoload در PHP
- OOP در PHP
- Dependency Injection در PHP
- SOLID در PHP
- Design Pattern در PHP
- REST API با PHP
- امنیت PHP
همچنین از صفحه Pillar «آموزش برنامه نویسی وب و PHP» به این مقاله لینک بده و از مقالات مرتبط PHP نیز لینکهای طبیعی به این صفحه ایجاد کن.





