PDA

View Full Version : مزیت استفاده از exception ها (try...catch) بجای set_error_handler چیست



reza_pnu_ney
پنج شنبه 13 اسفند 1394, 05:58 صبح
سلام دوستان
یه سوال برام پیش اومده
من معمولا از set_error_handler برای هندل کردن خطاها استفاده میکنم. اما میخوام بدونم مزیت استفاده از try...catch چی هست.
مثلا این مثال رو در نظر بگیرید که از کاربر یه عدد میگیریم و معکوسش رو برمیگردونیم. اگر کاربر عدد صفر وارد کنه ، خطای تقسیم بر صفر ایجاد میشه.
اگه بخوایم با exception اینو پیاده کنیم به این صورت میشه:

try { if($_GET['num']==0){ throw new Exception('division by zero'); } echo 1/$_GET['num']; } catch( Exception $e ) { echo $e->getMessage(); }

که من به این صورت پیاده سازی میکنم

set_error_handler(function(){ echo "division by zero"; }); echo 1/$_GET['num'];

مورد اولی حتی یه ضعف هایی نسبت به دومی داره. توی exceptionها حتما باید خطا رو هم خودت حدس زده باشی (یعنی بدونی که ممکنه که کاربر مقدار صفر رو بذاره) اما توی دومی هر خطایی داشته باشی می تونی اونی رو هندل کنی. ضمن اینکه در مورد دومی، دقیقا چک کردن نوع خطا رو هم میتونی داشته باشی. (یعنی چک کنی اگر عدد صفر بوده، یه سری عملیات انجام بشه.)

حالا میخوام بدونم اصلا مزیت exceptionها چی هست . یعنی اینکه با exceptionها چی کار میشه کرد که با اون روش دیگه نمیشه.

Unique
جمعه 14 اسفند 1394, 18:32 عصر
set_error_handler حالت Global داره و عموما برای یک بلوک از کد استفاده کردنش منطقی نیست ،‌ try catch روش بسیار بهینه تر و صحیح تری هستش.


وی exceptionها حتما باید خطا رو هم خودت حدس زده باشی
خیر کسی حدس نمیزنه ، شما try catch را بد نوشتین ! خطا را توی catch با همون getMessage نمایش میدن نه اینکه بیان شرایط را برای عدد بررسی کنن ! شما که دارین بررسی میکنین عدد صفر نباشه خوب اگه صفر بود به کاربر پیام بدین ، دیگه نیازی به handle کردن خطا وجود نداره !


ضمن اینکه در مورد دومی، دقیقا چک کردن نوع خطا رو هم میتونی داشته باشی.
توی catch هم میشه همین کار را انجام داد !