دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۳
  • آذر

جلسه ۲۶ : مدیریت استثنا در php

  • دسته‌بندی‌ها :
جلسه ۲۶ : مدیریت استثنا در php
    • جزئیات
    • نوع محتواآموزش تصویری

      با عرض سلام خدمت کاربران محترم پی وی لرن. در این جلسه قصد داریم به مبحث مدیریت استثنا (Exception Handling) در php بپردازیم.
      جلسه پیش نیز به آموزش مدیریت خطا در php پرداختیم.

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

      php exception handling

      استثنا چیست؟

      این اتفاقات معمولا هنگامی که یک استثنا رخ می دهد، می افتند:

      • وضعیت کد ذخیره می شود
      • کد اجرایی به یک تابع سفارشی مدیریت استثنا سویچ می کند
      • بسته به وضعیت، مدیریت کننده ممکن است اجرای وضعیت کد ذخیره شده را از سر بگیرد، اسکریپت استثنا را متوقف کند و یااسریکپت را از محل متفاوتی ادامه دهد

       

      در ادامه با روش های مختلف مدیریت استثنا آشنا خواهید شد:

      • استفاده اصلی استثنا ها
      • ساخت یک مدیریت کننده استثنا سفارشی
      • استثنا های چندگانه
      • پرتاب مجدد استثنا
      • تنظیم یک مدیریت کننده استثنا سطح بالا

       

      استفاده اصلی استثنا ها

      وقتی یک استثنا رخ می دهد(پرتاب می شود)، ادامه کد اجرا نمی شود و php تلاش می کند تا بلوک “catch” متناظر را پیدا کند.

      اگر یک استثنا گرفته نشود، یک خطا جدی با پیام “Uncaught Exception” ظاهر می شود.

      بیاید یک استثنا را بدون گرفتنش راه اندازی کنیم:

      مثال : 

      خروجی کد به شکل زیر می باشد:

      مثال : 

      try و catch

      برای جلوگیری از رخ دادن خطا بالا باید کدی فراهم کنیم تا استثنا را مدیریت کند.

      این کد باید شرایط زیر را داشته باشد:

      1. try – تابعی که دارای یک استثنا است باید در بلوک try قرار بگیرد. اگر استثنا رخ نداد، کد به طور معمول اجرا می شود.
      2. throw – راه اندازی یک استثنا را انجام می دهد. هر throw باید یک catch داشته باشد
      3. catch – یک بلوک catch به رسیدگی به استثنا می پردازد. شامل شئی (object) می باشد که پیام خطا را در خود دارد.

       

      مثال:

      مثال : 

      خروجی به شکل زیر می باشد:

      مثال : 

       

      ساخت یک کلاس استثنا

      برای ساخت یک مدیریت کننده سفارشی باید یک کلاس خاص ایجاد کنید که توابعی داشته باشد تا بتوانند در هتگام رخ دادن استثنا فراخوانده شوند. کلاس شما باید از کلاس Exception ارث ببرد.

      کلاس سفارشی ما پروپرتی ها (متغیر) کلاس Exception را به ارث می برد که می توانید آن ها را در کلاس خود استفاده کنید.

      کد ساخت کلاس:

      مثال : 

      کلاس جدید یک کپی از کلاس قدیمی exception به علاوه یک تابع ()errorMessage هست.چون که این کلاس یک کپی هست و متغیر ها و متد ها (تابع) را به ارث می برد، ما می توانیم از توابعب مثل ()getLine و ()getFile و ()getMessage استفاده کنیم.

       

      استثنا های چندگانه

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

      مثال:

      مثال : 

      توضیح مثال بالا:

      کد بالا دو شرط را آزمایش می کند و اگر هیچ کدام از شرط ها برقرار نباشد یک استثنا پرتاب می کتد.

      1. کلاس ()customException به عنوان یک استثنا کلاس exception قدیمی ساخته شده است. از این طریق از تمام متغیر ها و توابع کلاس قدیمی ارث بری می کند.
      2. تابع ()errorMessage یک پیغام خطا بر می گرداند اگر آدرس ایمیل نامعتبر باشد
      3. متغیر email$ برای یک رشته آدرس ایمیل معتبر تنظیم شده اما مقدار رشته “example” را دارد
      4. بلوک try اجرا شده و در اولین شرط استثنا پرتاب نشده است
      5. دومین شرط یک استثنا را پرتاب خواهد کرد زیرا آدرس ایمیل معتبر نیست
      6. بلوک catch استثنا را گرفته و پیغام خطا را نمایش می دهد

       

      راه اندازی مجدد استثنا

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

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

      مثال : 

       

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

      تابع ()set_exception_handler یک تابع کاربرساز را برای مدیریت استثنا های گرفته نشده تنظیم می کند:

      مثال : 

      خروجی کد بالا:

      مثال : 

       

      قوانینی برای استثنا ها

      • ممکن است مد برای گرفتن استثنا های احتمالی در یک بلوک try احاطه شده باشد
      • هر بلوک try باید حداقل یک یک بلوک catch متناظر داشته باشد
      • چندین بلوک catch می توانند برای گرفتن استثنا های کلاس های مختلف استفاده شوند
      • استثنا ها می توانند در یک بلوک catch داخل بلوک try پرتاب ( یا پرتاب مجدد) شوند

       

      یک قانون ساده: اگر چیزی را پرتاب کردید، باید آن را بگیرید.

       

      جلسه مدیریت استثنا در php و سری جلسات آموزش پیشرفته زبان php به اتمام رسید. امیدوارم این آموزش ها مفید واقع شده باشند.
      با پی وی لرن همراه باشید.

       

      همچنین می توانید نظرات و سوالات خود را از طریق بخش نظرات با ما در میان بگذارید.

      QR:  جلسه ۲۶ : مدیریت استثنا در php
      به اشتراک بگذارید