سلام و عرض ادب
دقیقه 13 که استاد به جای PDOException از DBException استفاده می کنند، Exceptionی که throw میشه catch نمیشه.
مگه class فرزند متدهای class پدرش رو به ارث نمی بره؟
پس چرا اینجا DBException که فرزند PDOException هست، نتونست Exceptionی که با PDOException میشه catchش کرد رو catch کنه؟
سلام و احترام
همونطور که توی ویدیو گفته شد 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