اما با Error Classها ما صرفا فقط میتونیم خطاهای داخلی php رو کنترل کنیم. فرقش با exception چیه؟ اینکه ما خودمون میتونیم برای خودمون Exception بسازیم اما error classها از چهار نوع خطای زیر پیروی میکنن
این بخش رو متوجه نشدم : (شما با استفاده از exceptionها میتونید هر نوع خطای throwable رو کنترل کنید و مهم نیست که چی هستش ) فکر کنیم منظورتون اینه : با throwable هم میتونیم exception هارو catch کنیم و هم error هارو
این بخش رو متوجه نشدم : (اینکه ما خودمون میتونیم برای خودمون Exception بسازیم اما error classها از چهار نوع خطای زیر پیروی میکنن)
تو اون کدی که شما تو پاسخ قبلی گذاشتین اگه ما یک ابجکتی از کلاس divisionByZeroError ایجاد (throw) نکنیم هم php خودش اینکارو برای ما میکنه. وقتی خود php خطارو در قالب یه ابجکت Throw ، divisionByZeroError میکنه چه نیازی بود خودمون بیاییم اینکارو بکنیم؟
بعد تو عکسی که در پایین ضمیمه کردم سوالم اینه که چرا تو این hierarchy یه زیر شاخه برای error داریم و یک شاخه واسه exceptionها ؟ فرقشون تو چیه؟ چرا errorها هم exception رو extends نکردن؟
علی۰۷ اردیبهشت ۱۴۰۰، ۱۸:۵۵
سلام و احترام
ببینید شما خیلی ساده میتونید برای خودشون Exception بسازید، به چه صورت؟
class MyException extends Exception
{
}
شما خیلی ساده یه کلاس میسازید که مثلا تو کد بالا MyException هستش و خود کلاس Exception رو extends میکنید و خیلی راحت شما Exception خوتون رو ساختید. حالا کجا به کار میاد؟
برای مثال شما میخواید زمانی که کاربر لاگین میخواد بکنه یه Exception به اصطلاح throw کنید، به طور پیش فرض میتونید خیلی ساده خود کلاس Exception رو throw کنید اما برای اینکه یه کلاس مجزا براش داشته باشید تا بتونید یه کارای دیگه هم باهاش انجام بدید به صورت اختصاصی میایید یه Exception مثلا به اسم LoginFailedException رو ایجاد میکنید:
class LoginFailedException extends Exception
{
protected $message = 'یک پیام پیش فرض تستی';
}
حالا تفاوت اصلی با Errorها چی هستن؟
Errorهای توی php قابل کنترل نیستن به این معنی که وقتی خطایی از نوع Error اتفاق بیوفته برنامه شما متوقف میشه مثلا شما یه خطای syntax دارید برنامه شما قطعا متوقف میشه حتی اگه شما اونو داخل try catch هم بزارید اما برای Exceptionها اینطور نیست و شما میتونید اونارو catch کنید و اجازه بدید برنامه جلو بره یا کار دیگه انجام بدید
حالا این وسط ما یه سری Error داریم که throwable هستش تا بتونیم اونارو catch کنیم و مثلا بزاریم ادامه برنامه اجرا بشه یا هر تصمیمی که خواستیم دربارشون بگیریم
توی مثال بالا هم وقتی تابع متوجه میشه که این تقسیم به بی نهایت میرسه مفسر php خطا رو تولید میکنه و میده به catch حالا catch هر کاری خواست میکنه. اما برای مثال اگه fatal error بود ما نمیتونستیم اون رو catch کنیم
بهترین پاسخ
امیر صالحی۰۸ اردیبهشت ۱۴۰۰، ۱۷:۱۵
سلام
منظورشون اینکه وقتی که داخل برنامه به یک خطا بر میخوریم اگر در برنامه از Errorها استفاده کرده باشیم خوده php برنامه را متوقف میکند (بدونه اینکه ما دخالتی داشته باشیم ) و کد خطا + نام خطا را داخل خروجی به ما نمایش میده . و باید این خطا را رفع کنیم تا برنامه از اول کار بکند. وگرنه برنامه کار نمیکند.
ولی وقتی از Exceptionها استفاده میکنیم. وقتی در برنامه به یک خطا برخورد کردیم میتوانیم این خطا را دریافت کنیم و این خطا برنامه تحت کنترل ما هست، یعنی اینکه میتوانیم به خطا اجازه توقف برنامه را ندیم یا بگیم کد را نمایش بده .( هرکاری که میخوایم .)
در نمودار زیر گذاشتید . گفته Error به چهار دسته تقسیم میشوند که معلوم نیست کدام یکی از این خطا مربوط به کدام اصل هستند . ولی در Exceptionها خطاها مشخص کرده و داخل دو دسته بندی قرار داده شده .
۱) LogicException ( که زیر شاخه جستوجو کنید ) ۲) RuntimeException است خطایی است که در حین اجرا بر میخوریم .. ( زیر شاخه مخصوص به خود را دارد.)
.’امیدوارم که متوجه شدید. اگر مشکلی داشت لطفا بقیه تحصیح کنن