تعداد بازدید: 324

مدیریت خطا و استثنا در php

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

به طور کل خطاها را در php به دو دسته تقسیم می کنیم. خطاهایی که از ادامه برنامه جلوگیری می کند (terminate execution) و خطاهایی که پس از آن برنامه ادامه پیدا می کند (continue execution).

  • terminate execution
    • Parse Error : خطای زمان اجرا مثل syntax.مثلا نگذاشتن , ' " )( {} []
    • Fatal Error : خطاهای مثلا redeclare function , call undefined fucntion , require file
  • continue execution
    • Warning : خطاهایی مثل اشتباه در پارامتر دهی ، include ، header error
    • Notice : استفاده از متغیر یا ایندکس تعریف نشده (E_NOTICE)

Error Level Constants

سطوح مختلفی از خطا داریم که برای هر یک یک ثابت در نظر گرفته ایم . در تنظیمات PHP در فایل php.ini ما می توانیم برای نمایش خطاها (پارامتر error_reporting) از ثوابت زیر استفاده کنیم:

E_ALL : تمامی errors و warning

E_ERROR : خطاهای Fatal و زمان اجرا (Parse)

E_PARSE : خطای زمان اجرا (Syntax)

E_NOTICE : خطای notices

Error Handling Functions

trigger_error : اگر بخواهیم می توانیم خطا تولید کنیم. این تابع دو پارامتر دارد که اول متن خطا و دوم نوع آن می باشد:

set_error_handler : می توان در زمان اجرای خطا یک تابع را اجرا کند که آن تابع پارامتر های متفاوتی می گیرد.

پارامتر اول تابع callable یک تابع است که پارامتر های زیر را می گیرد تا با توجه به آن اقدامات لازم را انجام دهد:

می توان به جای تابع یک رشته تعریف کرد که پیام خاص را نمایش دهد. پارامتر دوم نوع خطا است.

error_reporting : نمایش خطا در این برنامه به چه شکل باشد. پارامتر ورودی آن یکی از Error Types است.

برای این که به کل هیچ خطایی در پروسه شما نمایش داده نشود کد زیر را در ابتدای اجرای پروسه بنویسید:

Exceptions

یک process ممکن است در اسنثنایی خطا داشته باشد مثلا به ازای برخی پارامتر ها خطا بخورد که قوانین خطا می تواند توسط ما یا php تعیین گردد.همان طور که خطاهای پیش فرض و custom داشتیم اسنثنا های پیش فرض و custom داریم(منظور منطق اجرای استثنا است).

به طور مثال عملیات تقسیم در ریاضیات عملیاتی مجاز است. اما استثنایی در این میان وجود دارد به نام division by zero که اعداد تقسیم بر صفر غیر مجاز است.

Exception یک کلاس پیش فرض php است که متدهای کاربردی دارد. زمانی که یک Exception پرتاب (throw) می شود یک شئ از روی این کلاس ساخته می شود. این شئ باید گرفته شود.

زمانی که یک استثنا پرتاب می شود (throw) از ادامه برنامه جلوگیری می کنند مگر اینکه توسط catch گرفته شوند. برای گرفتن این شئ از بلوک try…catch استفاده می کنیم. ساختار آن به شکل زیر می باشد

قسمت finally در پایان چه به ازای اجرای تابع یا دریافت Exception اجرا می گردد.

پس Exception توسط سازنده (نویسنده پروسه که می تواند تابع یا متدی از یک کلاس باشد) تعبیه و در زمان های لازم پرتاب می شود و توسط استفاده کننده (استفاده کننده از تابع یا متدی از یک شئ) catch می شود.

اگر در پروسه ای که استفاده می کنید از Exception استفاده شده بود آن را در بلوک try…catch استفاده شده است.

اگر تابع را در بلوک try…catch استفاده نمی کردیم خطای (Fatal Error) زیر را دریافت می کردیم

Exception یک کلاس است و می توان از آن فرزند آورد. فرزند یعنی یک Custom Exception که ویژگی های منحصر به فرد تری داشته باشد :

به طبع آن بعد از تعریف کلاس می توان از آن استفاده کرد :

Trowable : این کلاس هر گونه شئ پرتاب شده از طریق کلاس throw شامل Error یا Exception . به وسیله این کلاس می توان خطاهای موجود در یک اجرا را دریافت کنیم .

در کد بالا اگر تابع foo خطایی رخ داده باشد متن خطا را می توانیم در بلوک catch چاپ کنیم. گاها از این کلاس برای سیستم های خطایابی استفاده می شود. دقت داشته باشید Exception استثناست و شامل Error نمی باشد.

مطالب مشابه

xml in php , dom document

کار با XML در PHP

XML مخفف (eXtensible Markup Language - زبان نشانه گذاری توسعه پذیر) طراحی شده برای ذخیره و انتقال اطلاعات می باشد. XML...

امنیت و رمزنگاری در پی اچ پی

امنیت و رمزنگاری در php

امنیت و رمز نگاری دو مبحث مهم در برنامه ها به شمار میره. به طور کلی ما باید برای حفاظت باید برنامه هامون در برابر حملات...

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای مدیریت خطا و استثنا در php

پاسخی بگذارید

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