جلسه ۵۸: بررسی استثناها قسمت ۲ در php

<?php
function distance($speed, $time){
if($time <= 0){ throw new Exception('Time cannot be zero or negative.'); // Throw exception if time is negative } else{ $d = $speed*$time; echo "$speed * $time = $d"; } } try{ distance(10,2); distance(30,-4); //code will stop execution at this point (due to negative time) and start finding the catch block distance(15,3); echo 'All calculations done!'; // If an exception is thrown, this line will not execute } // catch block is executed when an exception is thrown in the try block // an object $e of Exception class is created catch(Exception $e){ echo "\n". "Caught exception: " . $e->getMessage(); //Exception handling
}
echo "\n"."Hello World!"; // Continue execution
?>
توجه: اگر هیچ catch
ای برای استثنا به وجود آمده وجود نداشته باشد، کد به پایان می رسد. بنابراین اگر می خواهید کد پس از به وجود آمدن استثنا، همچنان اجرا شود، باید حداقل یک بلوک catch
متناظر با هر بلوک try
داشته باشید. در تصویر زیر می توانید نحوه بررسی و رفع استثنا در برنامه را مشاهده کنید:
متدها
کلاس های استثنای PHP،
متدها و اطلاعات زیر را نیز فراهم می کنند:
()getCode
()getFile
()getLine
()getTraceAsString
دیگر متدها و ویژگی های کلاس استثنا را می توانید در اسناد PHP مشاهده کنید.
<?php
function division($a, $b){
if($b ==0){
throw new Exception('Divisor is zero'); // Throw exception if divisor is zero
} else{
$c = $a/$b;
echo "$a / $b = $c";
}
}
try{
division(10, 2);
division(15, 0);
division(30, -4);
echo 'All calculations done!';// If an exception is thrown, this line will not execute
}
// write your catch statement here
echo "\n"."Hello World!"; // Continue execution
?>
باتوجه به اینکه هیچ catch
ای در کد بالا وجود ندارد، این کد عمل نخواهد کرد. آیا می توانید در خط بیست و دوم یک عبارت catch
بنویسید که اجرا شود؟ اگر نتوانستید اشکالی ندارد. در تب بعدی جواب نهایی را آورده ایم. در بخش بعدی نحوه استفاده از استثناهای سفارشی در PHP
را خواهید آموخت.
کلاس استثنا
در این بخش می خواهیم درمورد چگونگی استفاده از کلاس استثنا برای مدیریت استثنا در سناریوهای مختلف صحبت کنیم. سرفصل مباحث این جلسه به شرح زیر می باشد:
- اجزا (components)
- متدها
PHP
دارای مکانیزم کنترل استثنا مبتنی بر کلاس است. کلاس استثنا یا exception
، یک کلاس داخلی با متد ها و ویژگی های متعدد است. در این بخش ما تنها به دنبال یادگیری اصول استفاده از کلاس استثنا برای بررسی و ازبین بردن استثناها هستیم.
اجزا (components)
try
: استثنا می تواند در این بلوک کد اتفاق بیافتد.catch
: زمانی که یک استثنا خاص اتفاق بیافتد، این بخش از کد اجرا می شود.throw
: برای از بین بردن یک استثنا استفاده میشود. همچنین می توان برای لیست کردن استثناهایی که یک تابع ایجاد می کند اما نمی تواند آن را از بین ببرد نیز استفاده شود.finally
: این بخش از کد پس از از بین بردن یا رفع استثنا اجرا می شود.
برای درک بهتر این موضوعات، قطعه کد زیر را اجرا کنید:
<?php
function distance($speed, $time){
if($time <= 0){ throw new Exception('Time cannot be zero or negative.'); // Throw exception if time is negative } else{ $d = $speed*$time; echo "$speed * $time = $d"; } } try{ distance(10,2); distance(30,-4); //code will stop execution at this point (due to negative time) and start finding the catch block distance(15,3); echo 'All calculations done!'; // If an exception is thrown, this line will not execute } // catch block is executed when an exception is thrown in the try block // an object $e of Exception class is created catch(Exception $e){ echo "\n". "Caught exception: " . $e->getMessage(); //Exception handling
}
echo "\n"."Hello World!"; // Continue execution
?>
توجه: اگر هیچ catch
ای برای استثنا به وجود آمده وجود نداشته باشد، کد به پایان می رسد. بنابراین اگر می خواهید کد پس از به وجود آمدن استثنا، همچنان اجرا شود، باید حداقل یک بلوک catch
متناظر با هر بلوک try
داشته باشید. در تصویر زیر می توانید نحوه بررسی و رفع استثنا در برنامه را مشاهده کنید:
متدها
کلاس های استثنای PHP،
متدها و اطلاعات زیر را نیز فراهم می کنند:
()getCode
()getFile
()getLine
()getTraceAsString
دیگر متدها و ویژگی های کلاس استثنا را می توانید در اسناد PHP مشاهده کنید.
<?php
function division($a, $b){
if($b ==0){
throw new Exception('Divisor is zero'); // Throw exception if divisor is zero
} else{
$c = $a/$b;
echo "$a / $b = $c";
}
}
try{
division(10, 2);
division(15, 0);
division(30, -4);
echo 'All calculations done!';// If an exception is thrown, this line will not execute
}
// write your catch statement here
echo "\n"."Hello World!"; // Continue execution
?>
باتوجه به اینکه هیچ catch
ای در کد بالا وجود ندارد، این کد عمل نخواهد کرد. آیا می توانید در خط بیست و دوم یک عبارت catch
بنویسید که اجرا شود؟ اگر نتوانستید اشکالی ندارد. در تب بعدی جواب نهایی را آورده ایم. در بخش بعدی نحوه استفاده از استثناهای سفارشی در PHP
را خواهید آموخت.