دستورات try و catch

می‌توان خطاها را با استفاده از دستور try…catch اداره کرد. بدین صورت که کدی را که احتمال می‌دهید ایجاد خطا کند در داخل بلوک try قرار می‌دهید. بلوک catch هم شامل کدهایی است که وقتی اجرا می‌شوند که برنامه با خطا مواجه شود. تعریف ساده‌ی این دو بلوک به این صورت است که بلوک try سعی می‌کند که دستورات را اجرا کند و اگر در بین دستورات خطایی وجود داشته باشد برنامه دستورات مربوط به بخش catch را انجام می‌دهد. برنامه زیر نحوه استفاده از دستور try…catch را نمایش می‌دهد :

  1:<?php
  2:
  3:    $five = 5;
  4:    $zero = 0;
  5:    
  6:    try                                                                    
  7:    {                                                                      
  8:        if($zero > 0  ||  $zero < 0)                                       
  9:        {                                                                  
 10:            $result = $five / $zero ;  //Error                             
 11:            echo $result;                                                  
 12:        }                                                                  
 13:        else                                                               
 14:        {                                                                  
 15:            throw new Exception('An attempt to divide by 0 was detected.');
 16:        }                                                                  
 17:    }                                                                      
 18:    catch(Exception $ex)                                                   
 19:    {                                                                      
 20:        echo 'Error : '.$ex -> getMessage();                               
 21:    }                                                                      
 22:
 23:?>

در کد بالا ما قصد داریم خطاهای احتمالی را که در عملیات تقسیم ممکن است به وجود آید را اداره کنیم. در ریاضیات عمل تقسیم عدد بر صفر ممکن نیست. در خطوط 3 و 4 دو متغیر تعریف کرده‌ایم که مقدار یکی از آنها 5 و دیگری 0 است. چون ممکن اس که عمل تقسیم بر صفر اتفاق افتد پس در قسمت try در خط 8 با استفاده از دستور if چک می‌کنیم که اگر مقدار متغیر $zero بزرگ‌تر و یا کوچکتر از 0 باشد عملیات تقسیم انجام و نتیجه نمایش داده شود (خطوط 10 و 11) در غیر اینصورت یک استثناء ایجاد کند. از آنجاییکه مقدار متغیر $zero عدد 0 است، یک استثناء رخ می‌دهد. این استثناء را در خط 15 و در قسمت else می‌نویسیم و یک پیغام دلخواه و قابل فهم برای نمایش به کاربر می‌نویسیم. برای چاپ پیغام خطا در دستور catch یک نمونه از کلاس Exception ایجاد کرده (خط 18) و با فراخوانی متد getMessage() (خط 20) این کلاس آن را چاپ و به کاربر نمایش می‌دهیم.