چرا DBException کار نکرد؟

پرسیده شده
فعالیت 943 روز پیش
دیده شده 537 بار
0

سلام و عرض ادب

 

دقیقه 13 که استاد به جای PDOException از DBException استفاده می کنند، Exceptionی که throw میشه catch نمیشه.

مگه class فرزند متدهای class پدرش رو به ارث نمی بره؟

پس چرا اینجا DBException که فرزند PDOException هست، نتونست Exceptionی که با PDOException میشه catchش کرد رو catch کنه؟

فایل پیوست

پویا پارسایی
پویا پارسایی

25 شهریور 00

1
حذف شده

سلام و احترام

همونطور که توی ویدیو گفته شد PDOException از نوع DBException نیست و وقتی که که یک Exceptionی از جنس PDOException ارسال میشه و داخل catch از DBException استفاده شده باشه این DBException نمیتونه exceptionی که از جنس PDOException هستش رو بگیره.

یادتون باشه که DBException از PDOException ارث بری کرده و اگه Exceptionی از جنس پدر throw بشه اون حتما خود پدر باید اون رو catch کنه ن کلاس فرزند اما اگه برعکسش رخ بده مشکلی پیش نمیاد

<?php


class DBException extends PDOException{} 

try{
    throw new PDOException('test');
}catch(DBException $e){
    echo "Does not catch the PDOException";
}

در کد بالا ما یه خطار داریم

PHP Fatal error:  Uncaught PDOException: test in /var/www/test.local/index.php:7
Stack trace:
#0 {main}
  thrown in /var/www/test.local/index.php on line 7

اما اگه برعکس این باشه میشه:

<?php


class DBException extends PDOException{} 

try{
    throw new DBException('test');
}catch(PDOException $e){
    echo "Catched";
}

جواب

Catched

 

 

فایل پیوست

امیر صالحی

توسط

امیر صالحی

27 شهریور 00

جلسه تعریف Exception های دلخواه و کاربرد آن ها