
PHP তে আমাদের Application-এর Robustness নিশ্চিত করার জন্য রয়েছে Error এবং Exception Handling-এর জন্য শক্তিশালী Mechanism। আপনি Custom Handlers সেট করতে পারেন, যা PHP কোনো Error Trigger করলে বা কোনো Exception Uncaught থাকলে Called হবে। কিন্তু, যদি আপনার কোড বিভিন্ন Libraries বা Frameworks ব্যবহার করে, তবে একটি Handler দ্বারা অন্য Handler-কে Override করা অস্বাভাবিক নয়। PHP 8.5 পর্যন্ত, বর্তমানে কোন Handler Active আছে তা সরাসরি জানার কোনো Built-In উপায় ছিল না, যা Debugging এবং Complex Application-এর Layered Error Handling-এ সমস্যা সৃষ্টি করতো। এই গ্যাপ পূরণ করতে PHP 8.5 দুটি নতুন Function যোগ করেছে: get_error_handler এবং get_exception_handler।
get_exception_handler এবং get_error_handler Functions - Error Handling হবে আরও স্বচ্ছ!
set_error_handler() এবং set_exception_handler() Functions পূর্ববর্তী Handler-কে Return করে। কিন্তু এই Return Value-টি শুধুমাত্র সেই Call-এর জন্য প্রযোজ্য ছিল। ধরুন, আপনার Application একটি Third-Party Library ব্যবহার করে যা তার নিজস্ব Error Handler সেট করে (যেমন একটি Logging Library)। এরপর আপনি আপনার কোডে Temporarily একটি Custom Handler সেট করলেন শুধুমাত্র একটি নির্দিষ্ট Task-এর জন্য, এবং সেই Task শেষ হওয়ার পর পূর্ববর্তী Handler-কে Restore করতে চান। এই নতুন Functions আপনাকে যেকোনো সময় জানতে দেবে বর্তমানে কোন Handler Active আছে, যা আপনাকে সঠিক Handler-কে Restore করতে বা Current Handler-এর সাথে Adjust করতে সাহায্য করবে। এটি বিশেষ করে Dynamic Error Handling Scenarios-এর জন্য খুবই কার্যকর, যেখানে আপনি Error Handling Behavior-কে Run-Time-এ Modify করতে চান।
get_error_handler Function
function get_error_handler():?callable {}
null Return করে। Callable Return করে (যেমন, Function Name String, Array for Class Method, বা Closure Object)।
var_dump(get_error_handler()); // আউটপুট: null (যদি কোনো Handler সেট না থাকে)
// একটি কাস্টম Error Handler সেট করা হলো
set_error_handler(function($errno, $errstr, $errfile, $errline) {echo "Custom Error Handler Activated!\n" // এই handler কিছু করে না বা শুধু Log করে return true; // true রিটার্ন করলে PHP এর Default Error Handler কল হবে না});
var_dump(get_error_handler()); // আউটপুট: Closure Object এর তথ্য দেখাবে
restore_error_handler(); // কাস্টম handler সরিয়ে আগেরটা পুনরুদ্ধার করা হলো
var_dump(get_error_handler()); // আউটপুট: null (যদি আগেরটি null হয়)
get_exception_handler Function:get_exception_handler Function-টিও get_error_handler-এর মতোই কাজ করে, তবে এটি Exception Handler-এর জন্য:
function get_exception_handler():?callable {}
null Return করে। Callable Return করে।
var_dump(get_exception_handler()); // আউটপুট: null (যদি কোনো Handler সেট না থাকে)
// একটি কাস্টম Exception Handler সেট করা হলো
set_exception_handler('my_exception_logger');
function my_exception_logger(Throwable $e): void {echo "Caught an exception: ". $e->getMessage(). "\n"}
var_dump(get_exception_handler()); // আউটপুট: 'my_exception_logger' String দেখাবে
restore_exception_handler(); // কাস্টম handler সরিয়ে আগেরটা পুনরুদ্ধার করা হলো
var_dump(get_exception_handler()); // আউটপুট: null (যদি আগেরটি null হয়)
PHP-এর এই নতুন Functions-কে আগের Versions-এর জন্য Polyfill করা তুলনামূলকভাবে সহজ, কারণ set_error_handler() এবং set_exception_handler() নিজেই পূর্ববর্তী Handler-কে Return করে। এই Polyfill গুলি function_exists() চেক ব্যবহার করে নিশ্চিত করে যে Function-টি ইতিমধ্যেই Declared না থাকলে তবেই Define করা হবে।
if (!function_exists('get_error_handler')) {function get_error_handler():?callable {$handler = set_error_handler(null); // বর্তমান handler নিয়ে এসে null সেট করে restore_error_handler(); // আগের handler পুনরুদ্ধার করে
return $handler;}
if (!function_exists('get_exception_handler')) {function get_exception_handler():?callable {$handler = set_exception_handler(null); // বর্তমান handler নিয়ে এসে null সেট করে restore_exception_handler(); // আগের handler পুনরুদ্ধার করে return $handler;}
get_error_handler এবং get_exception_handler নতুন Functions। যদি আপনার Application-এর Global Namespace-এ একই নামে কোনো Function Declared না থাকে, তবে কোনো Backward Compatibility Issue হবে না। Polyfill-এর মাধ্যমে পুরোনো Versions-এও এটি ব্যবহার করা যাবে, যা আপনাকে Smooth Transition-এর সুবিধা দেবে। এটি Error এবং Exception Handling Behavior-কে Trace করা এবং Management করাকে আরও শক্তিশালী করে তুলবে।
এই পর্বে আমরা আলোচনা করলাম PHP এর নতুন get_exception_handler এবং get_error_handler Functions নিয়ে, আগামী পর্বে PHP 8.5 এর আরেকটি নতুন ফিচার নিয়ে আলোচনা করবো।
আমি সোহানুর রহমান। সুপ্রিম টিউনার, টেকটিউনস, ঢাকা। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 12 বছর 2 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 675 টি টিউন ও 200 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 123 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
কখনো কখনো প্রজাপতির ডানা ঝাপটানোর মত ঘটনা পুরো পৃথিবী বদলে দিতে পারে।