آموزش مدیریت خطا و استثنا در PHP
آموزش مدیریت خطا و استثنا در PHP
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش مدیریت خطا و استثنا در PHP خواهیم پرداخت.
مدیریت خطا فرآیند گرفتن خطاهای مطرح شده توسط برنامه شما و سپس اقدام مناسب است. اگر اشتباهات را به درستی مدیریت کنید، ممکن است منجر به عواقب پیش بینی نشده بسیاری شود.
برای کنترل خطاها در PHP بسیار ساده است.
استفاده از تابع ()die
هنگام نوشتن برنامه PHP خود ، باید قبل از ادامه همه شرایط خطای احتمالی را بررسی کنید و در صورت لزوم اقدامات مناسب را انجام دهید.
مثال را بدون داشتن پرونده /tmp/test.xt و با این فایل دنبال کنید.
1 2 3 4 5 6 7 8 9 |
<?php if(!file_exists("/tmp/test.txt")) { die("File not found"); }else { $file = fopen("/tmp/test.txt","r"); print "Opend file sucessfully"; } // Test of the code here. ?> |
به این ترتیب می توانید یک کد کارآمد بنویسید. با استفاده از تکنیک بالا می توانید هر زمان که برنامه شما خطا کرد متوقف شده و پیام معنی دارتر و کاربرپسندی را نمایش دهید.
تعریف تابع مدیریت خطاهای سفارشی
شما می توانید تابع خود را برای مدیریت هر خطایی بنویسید. PHP چارچوبی برای تعریف تابع مدیریت خطا در اختیار شما قرار می دهد.
این تابع باید بتواند حداقل دو پارامتر را کنترل کند (سطح خطا و پیام خطا) اما می تواند حداکثر پنج پارامتر را بپذیرد (به صورت اختیاری: پرونده ، شماره خط و زمینه خطا) –
نحو
1 |
error_function(error_level,error_message, error_file,error_line,error_context); |
1 | error_level
اجباری – سطح گزارش خطا را برای خطای تعریف شده توسط کاربر مشخص می کند. باید یک عدد ارزش باشد. |
2 | error_message
اجباری – پیام خطا را برای خطای تعریف شده توسط کاربر مشخص می کند |
3 | error_file
اختیاری – نام پرونده ای را که خطا در آن رخ داده را مشخص می کند |
4 | error_line
اختیاری – شماره خطی را که خطا در آن رخ داده را مشخص می کند |
5 | error_context
اختیاری – آرایه ای را مشخص می کند که شامل هر متغیر و مقادیر استفاده از آنها هنگام وقوع خطا باشد |
سطوح احتمالی خطا
این سطوح گزارش خطا انواع مختلف خطایی است که کاربر کنترل کننده خطا می تواند برای آنها استفاده شود.
ثابت و توضیحات | مقدار | |
---|---|---|
1 | .E_ERROR
خطاهای خطرناک زمان اجرا. اجرای متن متوقف شده است |
1 |
2 | E_WARNING
خطاهای زمان اجرا غیر کشنده. اجرای متن متوقف نیست |
2 |
3 | E_PARSE
خطاهای تجزیه زمان کامپایل. خطاهای تجزیه فقط باید توسط تجزیه کننده تولید شود. |
4 |
4 | E_NOTICE
اعلامیه های زمان اجرا اسکریپت موردی را پیدا کرد که ممکن است یک خطا باشد ، اما ممکن است هنگام اجرای معمول اسکریپت نیز اتفاق بیفتد |
8 |
5 | E_CORE_ERROR
خطاهای خطرناکی که در هنگام راه اندازی اولیه PHP رخ می دهد. |
16 |
6 | E_CORE_WARNING
خطاهای زمان اجرا غیر خطرناک. این در هنگام راه اندازی اولیه PHP اتفاق می افتد. |
32 |
7 | E_USER_ERROR
خطای خطرناک ایجاد شده توسط کاربر. این مانند E_ERROR است که توسط برنامه نویس با استفاده از تابع PHP trigger_error تنظیم شده است |
256 |
8 | E_USER_WARNING
هشدار غیر خطرناک تولید شده توسط کاربر. این مانند E_WARNING تنظیم شده توسط برنامه نویس با استفاده از تابع PHP trigger_error است |
512 |
9 | E_USER_NOTICE
اعلان تولید شده توسط کاربر. این مانند E_NOTICE است که توسط برنامه نویس با استفاده از تابع PHP trigger_error تنظیم شده است |
1024 |
10 | E_STRICT
اعلامیه های زمان اجرا PHP می تواند تغییراتی را در کد شما ایجاد کند که اطمینان از بهترین قابلیت همکاری و سازگاری سریع کد شما با آن امکان پذیر است. |
2048 |
11 | E_RECOVERABLE_ERROR
خطای مهلک قابل جلب. این مانند E_ERROR است اما می تواند توسط یک دسته مشخص شده توسط کاربر گیر بیابد (همچنین به set_error_handler مراجعه کنید |
4096 |
12 | E_ALL
همه خطاها و هشدارها ، به جز سطح E_STRICT (E_STRICT از PHP 6.0 بخشی از E_ALL خواهد بود) |
تمام سطح خطای فوق را می توان با استفاده از تابع PHP داخلی کتابخانه تنظیم کرد که در آن کابین سطح از هر مقدار تعریف شده در جدول بالا باشد.
1 |
int error_reporting ( [int $level] ) |
در زیر روش ایجاد یک تابع مدیریت خطا وجود دارد –
1 2 3 4 5 6 7 8 9 |
<?php function handleError($errno, $errstr,$error_file,$error_line) { echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line"; echo "<br />"; echo "Terminating PHP Script"; die(); } ?> |
به محض اینکه کنترل کننده خطای سفارشی خود را تعریف کردید ، باید آن را با استفاده از PHP توابع مجموعه set_error_handler تنظیم کنید. حال بیایید با فراخوانی تابعی که وجود ندارد ، مثال خود را بررسی کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php error_reporting( E_ERROR ); function handleError($errno, $errstr,$error_file,$error_line) { echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line"; echo "<br />"; echo "Terminating PHP Script"; die(); } //set error handler set_error_handler("handleError"); //trigger error myFunction(); ?> |
مدیریت استثنائات
PHP 5 یک مدل استثنایی شبیه به سایر زبانهای برنامه نویسی دارد. استثنائات مهم هستند و كنترل بهتري را در مورد كنترل خطا فراهم مي كنند.
بیایید در اینجا کلمه کلیدی جدید مربوط به موارد استثنا را توضیح دهیم.
- Try – یک تابع با استفاده از یک استثنا باید در بلوک “امتحان” باشد. اگر استثنا راه اندازی نکند ، کد به صورت عادی ادامه می یابد. اما اگر استثنا باعث شود ، یک استثنا “thrown” می شود.
- thrown – اینگونه استثنا را ایجاد می کنید. هر “پرتاب” باید حداقل یک “Catch” داشته باشد.
- Catch – بلوک “catch” یک استثنا را بازیابی می کند و یک شی object حاوی اطلاعات استثنا ایجاد می کند.
هنگامی که یک استثنا thrown می شود، کد زیر عبارت اجرا نمی شود ، و PHP تلاش می کند تا اولین بلوک catch منطبق را پیدا کند. اگر یک استثنا گیر نیفتد ، یک خطایخطرناک PHP با “Uncaught Exception …” صادر می شود
یک استثنا را می توان در PHP پرتاب کرد ، و گرفت (“catch”) کرد. کد ممکن است در یک بلوک try احاطه شده باشد.
هر تلاش باید حداقل یک بلوک مربوطه داشته باشد. برای گرفتن دسته های مختلف از استثنا ها می توان از چندین بلوک صید استفاده کرد.
موارد استثنا را می توان در یک بلوک صید پرتاب کرد (یا دوباره پرتاب کرد).
مثال
در زیر قطعه کد وجود دارد ، این کد را در یک فایل کپی و جایگذاری کنید و نتیجه را تأیید کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php try { $error = 'Always throw this error'; throw new Exception($error); // Code following an exception is not executed. echo 'Never executed'; }catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } // Continue execution echo 'Hello World'; ?> |
در مثال فوق از تابع e-> getMessage$ برای دریافت پیام خطا استفاده شده است. توابع زیر وجود دارد که می تواند از کلاس Exception استفاده شود.
- ()getMessage – پیام استثنا
- ()getCode – کد استثنا
- ()getFile – نام پرونده منبع
- ()getLine – خط منبع
- getTrace () آرایه ()backtrace
- ()getTraceAsString – رشته ردیابی شکل گرفته
ایجاد کنترل کننده استثناهای سفارشی
می توانید کنترل کننده استثنای سفارشی خود را تعریف کنید برای تنظیم تابع کنترل کننده استثنای تعریف شده توسط کاربر، از تابع زیر استفاده کنید.
1 |
string set_exception_handler ( callback $exception_handler ) |
در اینجا Exception_handler نام تابعی است که هنگام وقوع یک استثنا غیرقابل ضبط فراخوانی می شود. این تابع قبل از فراخوانی ()set_exception_handler باید تعریف شود.
مثال
1 2 3 4 5 6 7 8 9 10 |
<?php function exception_handler($exception) { echo "Uncaught exception: " , $exception->getMessage(), "\n"; } set_exception_handler('exception_handler'); throw new Exception('Uncaught Exception'); echo "Not Executed\n"; ?> |
لیست جلسات قبل آموزش PHP
- آموزش PHP
- معرفی PHP
- آموزش تنظیمات محیط PHP
- آموزش نحو PHP
- آموزش انواع متغیر در PHP
- آموزش انواع ثابت ها در PHP
- آموزش انواع عملگرها در PHP
- آموزش تصمیم گیری در PHP
- آموزش انواع حلقه در PHP
- آموزش آرایه ها در PHP
- آموزش رشته ها در PHP
- آموزش مفاهیم وب در PHP
- آموزش روش های GET & POST در PHP
- آموزش Inclusion فایل در PHP
- آموزش پرونده ها و I / O در PHP
- آموزش توابع در PHP
- آموزش کوکی ها در PHP
- آموزش جلسات در PHP
- آموزش ارسال ایمیل با استفاده از PHP
- آموزش بارگذاری پرونده در PHP
- آموزش استاندارد کدگذاری در PHP
- آموزش متغیرهای از پیش تعریف شده در PHP
- آموزش عبارات منظم در PHP
دیدگاه شما