سی ام اس نویسسی ام اس نویسیاد بگیر، سیستم خودتو بنویس
مجلهتماس با ما
سی ام اس نویسسی ام اس نویس

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

پیوندهای سریع
محصولات فیزیکیمحصولات دیجیتالدوره‌های آموزشی
سی ام اس نویس
مجله سی ام اس نویستماس با ماپنل کاربری
سی ام اس نویس — تمامی حقوق برای سی ام اس نویس محفوظ است. © 1406 تماس با ما09307711941
Exception در PHP چیست؟ آموزش مدیریت خطا و استثنا در PHP

Exception در PHP چیست؟ آموزش مدیریت خطا و استثنا در PHP

ممدیر کل سیستم ۱۸ شهریور ۱۴۰۵ ۲۰ دقیقه مطالعه ۲ بازدید
Exception در PHP چیست؟ آموزش مدیریت خطا و استثنا در PHP

وقتی یک برنامه 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();

}

در این مثال:

  1. کد داخل try اجرا می‌شود.
  2. یک Exception ایجاد می‌کنیم.
  3. اجرای بخش try متوقف می‌شود.
  4. کنترل به catch منتقل می‌شود.
  5. پیام 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 استفاده می‌شود.
  • Throwable Interface مشترک هر دو است.

# 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ها
RuntimeExceptionException مربوط به شرایط Runtime
InvalidArgumentExceptionآرگومان نامعتبر
Errorخطاهای سطح زبان/Runtime
ThrowableInterface مشترک 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 نیز لینک‌های طبیعی به این صفحه ایجاد کن.

نظرات (0)

نظرات پس از تأیید مدیر نمایش داده می‌شوند

هنوز نظری ثبت نشده است؛ اولین نفر باشید!

مقالات مرتبط

ساخت CMS با Laravel 12؛ آموزش ساخت سیستم مدیریت محتوا از صفر

ساخت CMS با Laravel 12؛ آموزش ساخت سیستم مدیریت محتوا از صفر

۲۴ دقیقه
ساخت فروشگاه اینترنتی با Laravel 12؛ آموزش پروژه‌محور از صفر تا طراحی هسته فروشگاه

ساخت فروشگاه اینترنتی با Laravel 12؛ آموزش پروژه‌محور از صفر تا طراحی هسته فروشگاه

۲۲ دقیقه
ساخت Marketplace با Laravel؛ آموزش طراحی فروشگاه چندفروشندگی

ساخت Marketplace با Laravel؛ آموزش طراحی فروشگاه چندفروشندگی

۲۲ دقیقه
مدیریت Queueهای سنگین در Laravel؛ آموزش پردازش کارهای طولانی

مدیریت Queueهای سنگین در Laravel؛ آموزش پردازش کارهای طولانی

۲۲ دقیقه