
توی دوره رایگان PHP، هر چیزی که برای حرفهای شدن نیاز داری رو یاد میگیری! از مفاهیم پایه تا پیشرفته، همراه با یه پروژه واقعی برای ساخت یه سایت مثل آپارات.
مشاهده بیشتر
توی این دوره با هم یه وبسایت خبری واقعی رو از صفر میسازیم! از طراحی دیتابیس و احراز هویت تا ساخت API و یه پنل مدیریت حرفهای، همه رو یاد میگیریم و آماده پروژههای واقعی میشی!
مشاهده بیشترمشخصات مقاله
آموزش PHP Error Handeling
رفع خطاها، فرآیند پیدا کردن خطاها یی است که برنامه اعلام می کند. پس از پیدا کردن خطا اقدام مناسب صورت می گیرد. اگر این خطاها به درستی رفع نگردند، در آینده به مشکلات و تبعات دور از انتظار برخورد خواهید کرد.
رفع خطاها در PHP بسیار پروسه ی آسانی است.
استفاده از die() function
هنگام برنامه نویسی و پیش از پرداختن به رفع error، شما باید تمام شرایطی که ممکن است خطا در آن رخ دهد را پیش بینی کرده و درنظر بگیرید.
مثال زیر را بدون فایل /tmp/test.xt و با این فایل امتحان کنید.
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. ?>
با این روش می توانید یک کُد کارآمد بنویسید. با استفاده از این تکنیک، شما می توانید برنامه ی خود را هر زمانی که error داد متوقف کنید و پیغام های بسیار ساده تر و معنی دار تر نمایش دهید.
تعریف تابع سفارشی رفع خطا {custom error handling}
شما می توانید عملکرد سفارشی و خاص خود را برای رفع خطا بنویسید.PHP چهارچوب خاصی برای معرفی و نوشتن عملکرد رفع خطا مشخص می کند.
این عملکرد باید حداقل با دو پارامتر هم زمان کار کند ) error message و error level) ولی می تواند تا حداقل پنج پارامتر را بپذیرد )به دلخواه، فایل، شماره ی خط {file number} ومتن خطا {error context}).
syntax {دستور نحوی}
error_function(error_level، error_message، error_file، error_line، error_context);
مراحل احتمالی خطا {error levels}
این error levels انواع خطاهیی هستند که برنامه ی رفع کننده ی خطا نوشته شده توسط خود کاربر را می توان برای مدیریت و رفع آن به کار برد.
تمام مراحل خطا {error level} بالا را می توان با استفاده از PHP built-in library function زیر انتخاب کرد که در آن خطا می تواند هر یک از value های تعریف شده در جدول بالا باشد.
int error_reporting ( [int $level] )
در عبارت زیر یکی از راه هایی که می توانید با آن تابع مدیریت و رفع خطا ایجاد کنید به نمایش گذاشته شده است.
function handleError($errno، $errstr، $error_file، $error_line) { echo "Error: [$errno] $errstr - $error_file:$error_line"; echo " "; echo "Terminating PHP Script"; die(); } ?>
پس از این که error-handler custom {رفع کننده ی خطا سفارشی و مخصوص به خود} را نوشتید ، باید به کمک set_error_handler که یکی از عملکردهای PHP built-in library function هست آن را انتخاب و تنظیم کنید.حال اجازه دهید با مثال زیر عملکرد {function} ای که وجود ندارد فرابخوانیم.
error_reporting( E_ERROR ); function handleError($errno، $errstr، $error_file، $error_line) { echo "Error: [$errno] $errstr - $error_file:$error_line"; echo " "; echo "Terminating PHP Script"; die(); } //set error handler set_error_handler("handleError"); //trigger error myFunction(); ?>
مدیریت استثنا ها {handling exception}
PHP5 مدل استثنا {exception model} ای شبیه به زبان های برنامه نویسی دیگر دارد.استثنا ها از اهمییت بسیار برخوردار است و تسلط بیشتری در رفع و مدیرییت خطا در اختیار شما قرار می دهد.
اجازه دهید واژه های کلیدی مربوط به استثنا ها را یکی یکی تشریح کنیم.
- try – تابع {function} ای که از استثنا {exception} استفاده می کند باید در بلوک {block} try باشد. اگر استثنا فعال یا trigger نشود، کُد روال عادی خودش را ادامه می دهد. اما اگر trigger شود ، یک exception نشان داده {thrown} می شود.
- throw - به کمک این آیتم شما {trigger} باعث یک {exception} استثنا می شوید. هر "throw" حداقل باید یک "exception " داشته باشد.
- catch - یک بلوک "catch" با بازیابی یک استثنا object یا شی ای می سازد دربردارنده ی اطلاعات exception.
هنگامی که استثنا یی "thrown" می شود، کُدی که به دنبال دستور {statement} می آید اجرا نخواهد شد و PHP سعی می کند اولین matching catch block {کَچ بلاک مطابق} را پیدا کند. اگر هیچ استثتنایی "catch" نشد، یک پیغام خطای جدی PHP صادر می شود به این شکل "uncaught exception....
یک استثنا را در PHP می توان پرتاب کرد {thrown} و گرفت {caught یا catched} .کد ممکن است داخل یک بلوک تلاش {try block} محصور شده یا قرار گیرد.
هر تلاش {try} باید حداقل یک catch block مطابق و مربوط داشته باشد. می توان از چند code block برای گرفتن {catch} چند نوع یا کلاس استثنا {exception class} هم زمان استفاده کرد.
استثنا ها را می توان در یک codeblock throw یا rethrow کرد.
در زیر یک تکه کُد هست، این کد را در یک فایل کپی و پیست کنید و سپس نتایج را بررسی و تایید کنید.
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 function برای دریافت پیغام خطا استفاده می شود. function های زیر را می توانید از exception class انتخاب کنید.
- getmessage() - پیغام استثنا {message of exception}
- getcode() - کُدِ استثنا {code of exception}
- getcode() - اسم فایل منبع {source filename}
- getline() - خط منبع {source line}
- gettrace() - آرایه ی backtrace()
- gettraceasstring() - رشته ی فرمت شده و قالب دار پی گیری {array of formatted string}
ساختن مدیریت کننده سفارشی استثنا ها {custom exception handler}
شما می توانید رفع کننده ی استثنا خاص خود را طراحی کنید. از تابع {function} زیر برای انتخاب کردن این گزینه استفاده کنید.
string set_exception_handler ( callback $exception_handler )
اینجا exception_handler نام function ای است که هنگام رخ دادن یک uncaught exception باید فراخوانده شود. این function باید قبل از فراخواندن set_exception_handler() معرفی شود.
مثالfunction exception_handler($exception) { echo "Uncaught exception: " ، $exception->getMessage()، "\n"; } set_exception_handler('exception_handler'); throw new Exception('Uncaught Exception'); echo "Not Executed\n"; ?>
مجموعه کامل function های رفع کننده ی خطا را در این می توان مشاهده کرد PHP Error Handling Functions.