استثناءات PHP
ما هو الاستثناء؟
الاستثناء هو كائن يصف خطأ أو سلوكًا غير متوقع لبرنامج نصي PHP.
تم طرح الاستثناءات بواسطة العديد من وظائف وفئات PHP.
يمكن أيضًا للوظائف والفئات التي يحددها المستخدم طرح استثناءات.
تعتبر الاستثناءات طريقة جيدة لإيقاف دالة عندما تصادف بيانات لا يمكنها استخدامها.
رمي استثناء
تسمح throw
العبارة لوظيفة أو طريقة معرّفة من قبل المستخدم لطرح استثناء. عند طرح استثناء ، لن يتم تنفيذ الكود الذي يتبعه.
إذا لم يتم اكتشاف استثناء ، فسيحدث خطأ فادح مع رسالة "Uncaught Exception".
لنحاول طرح استثناء دون أن نلاحظه:
مثال
<?php
function divide($dividend, $divisor) {
if($divisor == 0)
{
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
echo divide(5, 0);
?>
ستبدو النتيجة كما يلي:
Fatal error: Uncaught Exception: Division by zero in
C:\webfolder\test.php:4
Stack trace: #0 C:\webfolder\test.php(9):
divide(5, 0) #1 {main} thrown in C:\webfolder\test.php on line 4
المحاولة ... بيان الصيد
لتجنب الخطأ من المثال أعلاه ، يمكننا استخدام
try...catch
العبارة لالتقاط الاستثناءات ومتابعة العملية.
بناء الجملة
try {
code that can throw exceptions
} catch(Exception $e) {
code that runs when an exception is caught
}
مثال
إظهار رسالة عند طرح استثناء:
<?php
function divide($dividend, $divisor) {
if($divisor ==
0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo
divide(5, 0);
} catch(Exception $e) {
echo "Unable to divide.";
}
?>
تشير كتلة catch إلى نوع الاستثناء الذي يجب اكتشافه واسم المتغير الذي يمكن استخدامه للوصول إلى الاستثناء. في المثال أعلاه ، نوع الاستثناء هو Exception
واسم المتغير $e
.
المحاولة ... المصيد ... أخيرا البيان
يمكن try...catch...finally
استخدام العبارة لالتقاط الاستثناءات. سيتم دائمًا تشغيل التعليمات البرمجية الموجودة في
finally
الكتلة بغض النظر عما إذا تم اكتشاف استثناء أم لا. إذا كان
finally
موجودًا ، فإن catch
الكتلة اختيارية.
بناء الجملة
try {
code that can throw exceptions
} catch(Exception $e) {
code that runs when an exception is caught
} finally {
code that
always runs regardless of whether an exception was caught
}
مثال
اعرض رسالة عند طرح استثناء ثم أشر إلى انتهاء العملية:
<?php
function divide($dividend, $divisor) {
if($divisor
== 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo
divide(5, 0);
} catch(Exception $e) {
echo "Unable to
divide. ";
} finally {
echo "Process complete.";
}
?>
مثال
إخراج سلسلة حتى إذا لم يتم اكتشاف استثناء:
<?php
function divide($dividend, $divisor) {
if($divisor == 0)
{
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} finally {
echo
"Process complete.";
}
?>
كائن الاستثناء
يحتوي "كائن الاستثناء" على معلومات حول الخطأ أو السلوك غير المتوقع الذي صادفته الوظيفة.
بناء الجملة
new Exception(message, code, previous)
قيمه المعامل
Parameter | Description |
---|---|
message | Optional. A string describing why the exception was thrown |
code | Optional. An integer that can be used used to easily distinguish this exception from others of the same type |
previous | Optional. If this exception was thrown in a catch block of another exception, it is recommended to pass that exception into this parameter |
طرق
عند اكتشاف استثناء ، يعرض الجدول التالي بعض الطرق التي يمكن استخدامها للحصول على معلومات حول الاستثناء:
Method | Description |
---|---|
getMessage() | Returns a string describing why the exception was thrown |
getPrevious() | If this exception was triggered by another one, this method returns the previous exception. If not, then it returns null |
getCode() | Returns the exception code |
getFile() | Returns the full path of the file in which the exception was thrown |
getLine() | Returns the line number of the line of code which threw the exception |
مثال
معلومات الإخراج حول استثناء تم طرحه:
<?php
function divide($dividend, $divisor) {
if($divisor == 0)
{
throw new Exception("Division by zero", 1);
}
return $dividend / $divisor;
}
try {
echo
divide(5, 0);
} catch(Exception $ex) {
$code = $ex->getCode();
$message = $ex->getMessage();
$file = $ex->getFile();
$line = $ex->getLine();
echo "Exception thrown in $file on line
$line: [Code $code]
$message";
}
?>
مرجع الاستثناء الكامل
للحصول على مرجع كامل ، انتقل إلى مرجع استثناءات PHP الكامل .
يحتوي المرجع على أوصاف وأمثلة لجميع طرق الاستثناء.