PHP-তে Exception Hierarchy এবং Fatal Errors এর হ্যান্ডলিং একটি গুরুত্বপূর্ণ বিষয়, যা আপনার কোডের স্থিতিশীলতা এবং নিরাপত্তা নিশ্চিত করতে সহায়ক। এই দুটি ধারণা একে অপরের থেকে আলাদা, তবে উভয়ই সঠিকভাবে হ্যান্ডল করা প্রয়োজন।
১. Exception Hierarchy (এক্সেপশন হায়ারার্কি)
PHP তে Exception একটি অবজেক্ট যা ইন্ডিকেট করে যে কোডের কোনও অংশে সমস্যা হয়েছে। PHP তে Exception এবং Error দুটি প্রধান শ্রেণী রয়েছে যা কোডের মধ্যে ত্রুটি চিহ্নিত করে। PHP তে Exception ক্লাসের ভিতরে অনেকগুলো সাবক্লাস রয়েছে, যা বিশেষ ধরনের ত্রুটির জন্য ব্যবহৃত হয়।
Exception Hierarchy
PHP তে Exception ক্লাসের একটি হায়ারার্কি রয়েছে, যেখানে Exception শ্রেণী মূল শ্রেণী এবং তার অধীনে আরও নির্দিষ্ট ধরণের এক্সেপশন শ্রেণী রয়েছে। এই এক্সেপশন শ্রেণীগুলি ব্যবহারকারীকে কোডের মধ্যে ত্রুটি শনাক্ত এবং হ্যান্ডল করতে সহায়ক।
Exception Hierarchy এর কাঠামো:
Throwable
├── Exception
│ ├── LogicException
│ │ └── InvalidArgumentException
│ └── RuntimeException
└── Error
├── CompileError
├── ParseError
└── TypeError- Throwable: এটি PHP তে
ErrorএবংExceptionএর অভিভাবক শ্রেণী। - Exception: এটি PHP তে সমস্ত সাধারণ এক্সেপশনগুলির মূল শ্রেণী।
- RuntimeException: সাধারণত রানটাইমে ঘটে এমন সমস্যা যেমন সংস্থান না পাওয়া বা ফাইল খোলার সমস্যা।
- LogicException: এটি সাধারণত কোডের লজিকাল ত্রুটির জন্য ব্যবহৃত হয়, যেমন ভুল প্যারামিটার।
- InvalidArgumentException: এটি বিশেষভাবে ব্যবহার করা হয় যখন একটি ফাংশনে ভুল প্যারামিটার পাস করা হয়।
Example of Exception Hierarchy
<?php
class CustomException extends Exception {}
try {
throw new CustomException("This is a custom exception");
} catch (CustomException $e) {
echo "Caught CustomException: " . $e->getMessage();
} catch (Exception $e) {
echo "Caught generic Exception: " . $e->getMessage();
}
?>এখানে, CustomException একটি কাস্টম এক্সেপশন ক্লাস, যা Exception ক্লাস থেকে উত্তরাধিকারসূত্রে এসেছে। PHP তে এক্সেপশন হ্যান্ডলিংয়ে try-catch ব্লক ব্যবহৃত হয়, যেখানে আপনি বিশেষ এক্সেপশন শ্রেণী (যেমন CustomException) ধরতে পারেন এবং এরপর সেটি হ্যান্ডল করতে পারেন।
২. Fatal Errors এর হ্যান্ডলিং
PHP তে Fatal Errors হল এমন ত্রুটি যা কোডের নির্বাহ বন্ধ করে দেয় এবং PHP স্ক্রিপ্টটি পুরোপুরি থামিয়ে দেয়। Fatal Errors সাধারণত কোডের ভুল সিনট্যাক্স বা অপর্যাপ্ত ফাংশন কলের কারণে ঘটে।
PHP-তে fatal errors সাধারণত Compile Error এবং Parse Error এর মতো ঘটতে পারে, এবং সেগুলিকে Exception দিয়ে হ্যান্ডল করা সম্ভব নয়, কারণ এটি কোডের সম্পূর্ণ কার্যক্ষমতাকে প্রভাবিত করে।
Fatal Error উদাহরণ
<?php
function testFunction() {
echo "This is a test function";
}
testFunction(); // Function is called correctly
nonExistentFunction(); // Fatal error, because this function doesn't exist
?>এখানে, nonExistentFunction() কল করলে একটি Fatal Error ঘটবে কারণ সেই ফাংশনটি ডিফাইন করা নেই।
Fatal Errors হ্যান্ডলিং
PHP তে Fatal Error গুলি সাধারণত try-catch ব্লকের মধ্যে ধরা যায় না। তবে, আপনি ErrorException ব্যবহার করে Fatal Errors হ্যান্ডল করতে পারেন এবং set_error_handler() ফাংশন দিয়ে কাস্টম এরর হ্যান্ডলার তৈরি করতে পারেন।
Example: Handling Fatal Errors using set_error_handler()
<?php
function customErrorHandler($errno, $errstr, $errfile, $errline) {
echo "Custom Error: [$errno] $errstr - $errfile:$errline";
}
set_error_handler("customErrorHandler");
function test() {
echo $undefinedVariable; // Notice error will be caught by the custom error handler
}
test();
?>এখানে, set_error_handler() ফাংশনটি একটি কাস্টম এরর হ্যান্ডলার সেট করে যা Notice বা Warning এররগুলো হ্যান্ডল করতে সক্ষম। কিন্তু Fatal Errors (যেমন ফাংশন না থাকা বা সঠিক সিনট্যাক্স না থাকা) try-catch ব্লকের মাধ্যমে ধরা সম্ভব নয়, শুধুমাত্র কাস্টম এরর হ্যান্ডলার ব্যবহার করে এগুলিকে ক্যাচ করা সম্ভব।
Handling Fatal Errors via register_shutdown_function()
Fatal errors এর জন্য আপনি register_shutdown_function() ব্যবহার করে একটি কাস্টম ফাংশন নিবন্ধন করতে পারেন, যাতে স্ক্রিপ্ট বন্ধ হওয়ার আগে fatal error গুলি হ্যান্ডল করা যায়।
<?php
function shutdownFunction() {
$error = error_get_last();
if ($error !== NULL) {
echo "Fatal Error: " . $error['message'];
}
}
register_shutdown_function('shutdownFunction');
function testFatalError() {
nonExistentFunction(); // This will trigger a fatal error
}
testFatalError();
?>এখানে, shutdownFunction() ফাংশনটি register_shutdown_function() এর মাধ্যমে রেজিস্টার করা হয়েছে, যা PHP স্ক্রিপ্ট শেষ হওয়ার আগে ফ্যাটাল এররগুলিকে ক্যাচ এবং প্রক্রিয়া করতে ব্যবহৃত হয়।
সারসংক্ষেপ
- Exception Hierarchy: PHP তে
ExceptionএবংErrorশ্রেণীর মধ্যে একটি হায়ারার্কি রয়েছে।Exceptionসাধারণ এক্সেপশনগুলির জন্য ব্যবহৃত হয় এবংErrorগুরুতর ত্রুটির জন্য ব্যবহৃত হয়। - Fatal Errors: PHP তে Fatal Errors হল এমন ত্রুটি যা স্ক্রিপ্টের কার্যকারিতা থামিয়ে দেয় এবং এটি সাধারণত try-catch ব্লক দ্বারা হ্যান্ডল করা যায় না। তবে, আপনি set_error_handler() এবং register_shutdown_function() ব্যবহার করে ফ্যাটাল এরর হ্যান্ডলিং করতে পারেন।
Exception Handling এবং Fatal Errors হ্যান্ডলিং সঠিকভাবে করতে পারলে, আপনার PHP অ্যাপ্লিকেশন আরও স্থিতিশীল এবং নিরাপদ হয়।
Read more