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

در 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 نمایش می‌دهیم.