آموزش مدیریت خطا در php

  • آپدیت شده در تاریخ

آموزش مدیریت خطا در php

مدیریت خطا در php یا همان Exception Handling در php که با دستور try catch انجام می شود , یک از موارد مهم اپلیکیشن های تحت وب است.برای آشنایی با انواع خطاها در php کلیک کنید

php نیز همانند زبان های برنامه نویسی دیگر مثل سی شارپ یک روش فوق العاده جذاب برای اداره کردن خطاها ارائه نموده است و آنهم استثنا یا Exception نام دارد .

آموزش مدیریت خطا در php

در php عملیات try-catch معمولا با استفاده از بلاک try و catch پیاده سازی می شود که خب در بعضی مواقع به این بلاک بخش دیگری به نام finally  اضافه می کنیم که بعد از اتمام بلاک try-catch کد های مربوط به final یا همان نهایی سازی اجرا می شود .

بلاک try شامل کدهایی است که به همراه قابلیت مدیریت خطا توسط php اجرا می شود و در صورت وجود هر خطا , توسط بلاک catch در php دریافت می شود .

برای هر یک از بلاک های try در اسکریپت php , باید حداقل یک بلاک catch وحود داشته باشد. می توانیم چندین بلاک catch نیز برای یک try به منظور مدیریت انواع exception ها در php داشته باشیم .

 

سینتکس try catch در php

کد php زیر به شما نحوه مدیریت خطا در php با try و catch را نشان میدهد .

مثال ساده php برای try – catch

یک مثال ساده از نحوه مدیریت خطا در php با try و catch را می بینیم.

در کد php بالا , بلاک try سعی می کند که طول آرایه گلوبال متغییر $_GET را برای چاپ هر یک از خانه های این آرایه بررسی کند .

اگر مقدار آرایه $_GET صفر باشد , یک استثنا را به اصطلاح پرتاب (throw) می کند. حلقه و دستور throw توسط if –else های بخش try مدیریت می شوند.

 

استفاده چندگانه از catch

همانطور که بخش اول مقاله مدیریت خطا در php با try catch اشاره کردیم , catch های چندگانه برای یک بلاک try در php برای مدیریت اولویت بندی استثنا ها به کار میرود .

برای مثال , کتابخانه php کلاس های جداگانه های به عنوان LogicException در ختیار ما قرار می دهد .

کد php زیر شامل چندین بلاک شرط پرتاپ برای  استثناهای مختلف php است . برای مثال :

برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود

در اسکریپت php بالا , ما مقدار timestamp را با تابع mktime() در php بر اساس پارامتر های آرایه پاس داده شده محاسبه می کنیم . از آنجایی که تابع mktime مقادیر عددی را به عنوان مختصات زمانی دریافت می کند, مجبور هستیم که تمام پارامتر ها را قبل از پاس دادن به این تابع بررسی کنیم.

در هنگام اعتبارسنجی , اگر نوع داده ای اشتباه باشد , پس یک InvalidArgumentException پرتاب (thrown) می شود . در این جا , اگر پارامتر های آرایه خالی باشند , پس یک کلاس نمونه از Exception پرتاب می شود .

این دو استثنا توسط دو بلاک catch جدا از هم برای یک بلاک try در این مثال استفاده شده اند .

 

Try-catch تو در تو

ما یک بلاک تو-در-تو php برای مدیریت مدیریت استثنا های بوجود آمده در بلاک قبلی ایجاد کردیم . برای مثال . اگر یک فایل آپلود کنیم , باید چک کنیم آیا از قبل وجود داشته یا خیر. اگر همچنین فایلی وجود نداشت , پس php یک file not found و بعد unable to upload file را به عنوان استثنا ایجاد میکند.

در چنین مواقعی , می توانید برای از try-catch های تو-در-تو برای نمایش خطاهای همه exception ها پیش آمده نشان بدید . برای مثال :

با پاس دادن یک نمونه از ارور exception قبلی می توانیم استثناهای تو-در-تو را مدیریت کنیم . و اسکریپت php بالا خروجی زیر را برگشت میدهد .

نکته :

  • می توانیم توابع سفارشی خود را به عنوان تابع مدیریت خطا توسط set_exception_handler() در php ست کنیم
  • در ورژن php5.5 و به بالا , می توانیم از بلاک finally برای مدیریت خطا در php استفاده کنیم . کد های داخل این بلاک به هر صورت چه خطایی ایجاد شود یا خبر , اجرا خواهد شد .

امیدوارم از آموزش مدیریت خطا در php نهایت استفاده را برده باشید . برای دانلود سورس این آموزش از باکس دانلود استفاده کنید.

هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .

موفق و پیروز باشید

حسن شفیعی توسعه دهنده وب و موبایل مدیر سایت علاقه خاصی به برنامه نویسی وب و موبایل دارم و هر روز تلاش می کنم به این حوزه مسلط تر شوم و اطلاعاتم را به شکل کاربردی برای علاقه مندان در وب به اشتراک بگذارم. اگر نیاز به برنامه نویس برای انجام پروژه و نوشتن اسکریپت های سمت وب, اپلیکیشن های اندروید و ios, پیدا کردن راه حل توسعه و غیره داشتید حتما از طریق تماس با ما/ واتساپ/ تلگرام بهم پیام بدید. برایتهیه هاست مطمین و پرسرعت کلیک کنید
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۵)

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. محمود رنجبر ۱۳ خرداد ۱۴۰۰

    سلام مهندس شفیعی وقت بخیر من خطاهای فرم ویرایش رو تو یک آرایه ریختم وقتی خطا اتفاق میفته صفحه ویرایش سفید میشه و خطا ها نشون داده میشه میخوام خطا ها بالای فرم نشون داده بشن فرم هم باشه چیکار باید کرد عکساشو تو چت فرستادم براتون تشکر از راهنمایی تون

    پاسخ
    1. حسن شفیعی ۱۳ خرداد ۱۴۰۰

      سلام.
      در این بلاک
      catch(Exception $e) {

      }
      خطا رو داخل یک متغییر بریزید $error_msg = $e->getMessage و این متغییر رو بالای فرم html با echo نمایش بدید.

      پاسخ
  2. محمود رنجبر ۱ بهمن ۱۳۹۹

    سلام مهندس شفیعی عزیز خدا قوت من برای یک فرم ثبت آگهی میخوام چند تا خطا رو با هم نشون بدم خطا ها رو ریختم تو آرایه میخوام آرایه ای که مقدار دهی شده رو تو url بفرستم به همین صفحه و دریافت کنم و نشون بدم ولی کار نمیکنه اصلا میشه اینکار رو کرد یعنی آرایه ای که قبلا مقدار دهی شده رو تو url بفرستیم با تشکر

    پاسخ
    1. حسن شفیعی ۱ بهمن ۱۳۹۹

      سلام ممنون.
      خیر آرایه رو نمیتونید در یک url ارسال کنید باید json_encode کنید و بعد بصورت POST ارسال کنید و در اون صفحه هم دریافت و بعد json_decode کنید تا آرایه قابل خواندن باشد.
      https://netparadis.com/post-json-data-using-php-curl

      پاسخ
  3. یوز ۲۷ خرداد ۱۳۹۹

    باسلام ممنونم بابت مطلب
    ولی اگر کدها ریفکتور بشن و نمایش داده بشه خیلی بهتر میشه

    پاسخ
دوره های آموزشی