ایجاد یک استثناء توسط کاربر

در PHP می توان یک استثناء سفارشی ایجاد کرد. استثناء سفارشی استثنایی است که توسط کاربر تعریف می شود و باید از کلاس پایه Exception ارث بری کند.به کد زیر توجه کنید :

   1: <?php
   2:     class DivideByZeroException extends Exception
   3:     {
   4:         public function __construct()        
   5:         {
   6:             $message = "Attempted to divide by zero...";        
   7:             parent::__construct($message);
   8:         }
   9:     }
  10: 
  11: 
  12:     $firstNumber = 10;
  13:     $secondNumber = 0;
  14: 
  15:     try
  16:     {    
  17:         if($secondNumber == 0 )
  18:         {     
  19:             throw new DivideByZeroException();       
  20:         }
  21:         else
  22:         {
  23:             $result = $firstNumber / $secondNumber;
  24:         }
  25:     }
  26:     catch (DivideByZeroException $error)
  27:     {
  28:         echo $error->getMessage();
  29:     }    
  30: ?>
Attempted to divide by zero...

همانطور که در کد بالا و در خط 2 مشاهده می کنید، یک کلاس جداگانه که از کلاس پایه Exception ارث می برد ایجاد کرده و نام آن را DivideByZeroException گذاشته ایم. به عنوان یک قرارداد باید به آخر نام کلاس های استثنایی که توسط کاربر تعریف می شوند کلمه Exception اضافه می شود. هدف از ایجاد این کلاس هم نمایش پیغام خطایی به کاربر مبنی بر خطای تقسیم عدد بر صفر است. برای اینکه یک پیغام خطای سفارشی هم ایجاد کنیم در خط 7 سازنده کلاس Exception را فراخوانی می کنیم. این سازنده دو پارامتر می گیرد که اولین پارامتر آن یک رشته است که می تواند همان پیغام خطایی باشد که ما دوست داریم به کاربر نمایش داده شود. حال به نحوه استفاده از این کلاس می پردازیم. در خطوط 12 و 13 دو متغیر تعریف کرده ایم که مقدار یکی از آنها 10 و دیگری 0 است. می خواهیم متغیر firstNumber را بر secondNumber تقسیم کنیم. یعنی تقسیم یک عدد بر صفر. در داخل بلوک try ، تست می کنیم که اگر مقدار متغیر secondNumber برابر 0 است یک استثناء تولید شود (خط 19) و چون این شرط برقرار است در نتیجه یک استثناء رخ می دهد، چون تقسیم عدد بر صفر بی معنی است. پیغام مربوط به استثناء را با استفاده از متد ()getMessage که کلاس DivideByZeroException از کلاس Exception به ارث برده است در خط 28 نمایش می دهیم.

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر مطرح بفرمایید.