Language Reference
PHP Manual

Exceptions

Table of Contents

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

وقتی یک استثنا پرتاب می‌شود کد بلافاصله پس از جمله اجرا نخواهد گردید و PHP تلاش خواهد نمود تا اولین انطباق catch را بیابد. اگر یک استثنا گرفته نشود خطای مرگبار PHP ایجاد خواهد شدکه پیام "Uncaught Exception ..." را نمایش می‌دهد مگر این که پردازشگر توسط set_exception_handler() تعیین شده باشد.

شی ایجاد شده می‌تواند کلاس Exception یا زیرکلاس Exception باشد. تلاش برای ایجاد شی خطای اصلی PHP ایجاد نمی‌کند.

Note:

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

Tip

Standard PHP Library (SPL) استثناهای خوبی را فراهم می‌کند.

Example #12 پرتاب استثنا

<?php
function inverse($x) {
    if (!
$x) {
        throw new 
Exception('Division by zero.');
    }
    else return 
1/$x;
}

try {
    echo 
inverse(5) . "\n";
    echo 
inverse(0) . "\n";
} catch (
Exception $e) {
    echo 
'Caught exception: ',  $e->getMessage(), "\n";
}

// Continue execution
echo 'Hello World';
?>

The above example will output:

0.2
Caught exception: Division by zero.
Hello World

Example #13 استثنا تودرتو

<?php

class MyException extends Exception { }

class 
Test {
    public function 
testing() {
        try {
            try {
                throw new 
MyException('foo!');
            } catch (
MyException $e) {
                
/* rethrow it */
                
throw $e;
            }
        } catch (
Exception $e) {
            
var_dump($e->getMessage());
        }
    }
}

$foo = new Test;
$foo->testing();

?>

The above example will output:

string(4) "foo!"

Language Reference
PHP Manual