কোডিং জগৎ কাঁপাতে আসছে PHP 8.5! নতুন ফিচার কী কী থাকছে! [পর্ব-০৪] :: আরও স্বচ্ছ Error Handling

Level 34
সুপ্রিম টিউনার, টেকটিউনস, ঢাকা

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 হবে আরও স্বচ্ছ!

কোডিং জগৎ কাঁপাতে আসছে PHP 8.5! নতুন ফিচার কী কী থাকছে!

কেন এটি গুরুত্বপূর্ণ?

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 {}
  • যদি কোনো Custom Error Handler সেট না থাকে (অর্থাৎ Default PHP Error Handling Active থাকে), এটি null Return করে।
  • যদি একটি Custom Handler সেট করা থাকে, এটি সেই 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 {}
  • যদি কোনো Exception Handler সেট না থাকে, এটি null Return করে।
  • যদি একটি Custom Handler সেট করা থাকে, এটি সেই 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 Polyfill (পুরোনো PHP Versions-এর জন্য)

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;}

Backward Compatibility Impact

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 এর আরেকটি নতুন ফিচার নিয়ে আলোচনা করবো।

Level 34

আমি সোহানুর রহমান। সুপ্রিম টিউনার, টেকটিউনস, ঢাকা। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 12 বছর 2 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 675 টি টিউন ও 200 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 123 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।

কখনো কখনো প্রজাপতির ডানা ঝাপটানোর মত ঘটনা পুরো পৃথিবী বদলে দিতে পারে।


টিউনস


আরও টিউনস


টিউনারের আরও টিউনস


টিউমেন্টস