آموزش Exception Handling در php

Image تحقیقات

آموزش Exception Handling در php

سلام دوستان عزیز

به امید خدا امروز میخواهیم درباره مدیریت Exception در معرفی آنها در زبان php   صحبت کنیم.

Exception  با معرفی php 5 روی کار اومدن و میشه گفت یه روش جدیدی بود برای کشف و مدیریت خطاها در زبان php.

 

استثنا یا Exception چیست؟

اگر در حین اجرای عادی اسکریبت، یک خطای خاص رخ دهد، بررسی کننده استثنا، راه اندازی شده و ادامه اجرای اسکریبت را تغییر می دهد، این خطا را می توان با دستورات شرطی، مشخص کرد، این شرط در حقیقت همان استثنای ماست.

برای استفاده از استثناها می توان مستقیماً از کلاس Exception استفاده کرد و آنرا به صورت زیر راه اندازی یا پرتاب (throw) کرد:

 

 

به طور معمول وقتی یک Exception راه اندازی می شود چه چیزهایی اتفاق می افتد؟

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

استفاده اصلی از استثناها
تعریف کلاس استثایِ خودمان
استثناهای چندگانه
راه اندازی مجدد استثنا
تعیین یک مهارکننده استثنای سطح بالا
نکته: یک استثنا همیشه با یک شرط همراه است و نباید برای پرش به جای دیگر استفاده شود.

 

استفاده اصلی از استثناها (Exception)

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

نکته: اگر php برای یک استثنا بلاک تطابقی آنرا نیابد، یک fatal error یا خطای مهلک، همراه با پیغام “Uncaught Exception” صادر خواهد شد.

مثال: در این مثال تابع “checkNum” بررسی می کند، اگر پارامتر ورودی آن بزرگتر از “1” بود Exception راه اندازی شود، البته توجه داشته باشید که Exception تعریف شده بدون Catch است:

راه انداز یا پرتاب استثنا(throw): یعنی چه طور یک استثنا را راه اندازی شود. هر “throw” باید حداقل یک “catch” داشته باشد.
بلاک catch: اگر استثانی پرتاب شود، بلاک “catch” آنرا می گیرد و یک شیء شامل اطلاعات استثنا ایجاد می کند.
مثال:
چون متغییر تعریف شده حاوی رشته ی “example” است? استثنا دوم در بلاک try راه اندازی می شود.
بلاک catch دوم استثنا را می گیرد و خطای مناسب را برمی گرداند.
نکته: اگر استثنای بوجود آمده، بلاک catch خود را نیابد، شروع به جستجوی یک بلاک catch دیگر در “سطوح بالاتر” خواهد کرد.

دوباره راه اندازی استثناها

بعضی مواقع ممکن است مایل باشید که یک استثنا به صورتی متفاوت از آنچه که استاندارد است بررسی شود. این امر با راه اندازی یک استثنا برای بار دوم از داخل بلاک catch امکان پذیر است.

یک اسکریبت خوب، باید خطاهای سیستمی را از کاربران معمولی پنهان کند، چون نمایش این خطاها برای برنامه نویس ها کاربرد دارد و برای کاربران معمولی جالب نیست، یک ایده خوب برای ساخت چنین پیغام هایی، دوباره راه اندازی استثناهاست.

مثال:

اگر متغییر ایمیل شامل زیر رشته “example” باشد استثنا برای بار اول راه اندازی می شود.
بلاکِ catch اولی(Exception) استثنا را مهار کرده و در ادامه استثنای customException را راه اندازی می کند.
بلاکِ catch دومی(customException) بلافاصله بعد از مهار کردن استثنا، پیغام مناسب را چاپ می کند.

تعیین یک بررسی کننده استثنای سطح بالا

تابع ()set_exception_handler، نام یک تابع تعریف شده توسط کاربر را به عنوان پارامتر ورودی می گیرد و برای کار با همه ی استثناهایی که بلاک catch برای آنها مشخص نشده است، از تابع مذکور استفاده می کند.

مثال:

هر بلاک try یا throw باید حداقل یک بلاک catch متناظر داشته باشد
استثناها می توانند درون یک بلاک catch راه اندازی شوند.
یک قانون ساده: چیزی را که راه اندازی(throw) می کنید باید مهار شود(catch).

این جلسه هم به پایان رسید…

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

برگرفته از سایت بیاموز