PHP-এর পুরানো সংস্করণে, আমরা শুধু এক্সসেপশন হ্যান্ডেল করতে পারতাম। এরর হ্যান্ডেল করা সম্ভব ছিল না। Fatal Error-এর কেসে, এটি সম্পূর্ণ অ্যাপ্লিকেশন বা অ্যাপ্লিকেশনের কিছু অংশ हाल্ট করত। এই সমস্যা সমাধান করতে, PHP 7 throwable ইন্টারফেস যোগ করেছে যাতে এক্সসেপশন এবং এরর দুটি হ্যান্ডেল করা যায়।
Exception: যেখানে একটি ফেটাল এবং রিকভারেবল এরর ঘটে, PHP 7 সম্পূর্ণ অ্যাপ্লিকেশন বা স্ক্রিপ্ট এক্সিকিউশন हाल্ট করার বদলে একটি এক্সসেপশন থ্রো করে।
Error: PHP 7 TypeError, ArithmeticError, ParserError, এবং AssertionError থ্রো করে, কিন্তু ওয়ার্নিং এবং নোটিস এরর অপরিবর্তিত থাকে। try/catch ব্লক ব্যবহার করে, এরর ইনস্ট্যান্স ক্যাচ করা যায়, এবং এখন, FatalErrors একটি এরর ইনস্ট্যান্স থ্রো করতে পারে। PHP 7-এ, একটি throwable ইন্টারফেস যোগ করা হয়েছে দুইটি এক্সসেপশন ব্রাঞ্চ, Exception এবং Error, throwable ইমপ্লিমেন্ট করার জন্য একীভূত করতে।
উদাহরণ
<?php class XYZ { public function Hello() { echo "class XYZ\n"; } } try { $a = new XYZ(); $a->Hello(); $a = null; $a->Hello(); } catch (Error $e) { echo "Error occurred". PHP_EOL; echo $e->getMessage() . PHP_EOL ; echo "File: " . $e->getFile() . PHP_EOL; echo "Line: " . $e->getLine(). PHP_EOL; } echo "Continue the PHP code\n"; ?>আউটপুট
উপরের প্রোগ্রামে, আমরা নিচের এরর পাব −
class XYZ Error occurred Call to a member function Hello() on null File: /home/cg/root/9008538/main.php Line: 11 Continue with the PHP code
নোট: উপরের উদাহরণে, আমরা একটি null অবজেক্টে একটি মেথড কল করছি। catch ব্যবহার করে এক্সসেপশন হ্যান্ডেল করা হয়েছে এবং তারপর PHP কোড কন্টিনিউ করছে।
Arithmetic Error
আমরা Arithmetic error-এর DivisionByZeroError ব্যবহার করব। কিন্তু এখনও ডিভিশন অপারেটরে ওয়ার্নিং এরর পাব।
উদাহরণ: arithmetic error
<?php $x = 10; $y = 0; try { $z = intdiv($x , $y); } catch (DivisionByZeroError $e) { echo "Error has occured\n"; echo $e->getMessage() . PHP_EOL ; echo "File: " . $e->getFile() . PHP_EOL; echo "Line: " . $e->getLine(). PHP_EOL; } echo "$z \n"; echo " continues with the PHP code\n"; ?>আউটপুট
উপরোক্ত প্রোগ্রাম ওয়ার্নিং এরর সহ এক্সিকিউট হবে −
Division by zero File: /home/cg/root/9008538/main.php Line: 5 continues with the PHP code
নোট: উপরের প্রোগ্রামে, আমরা intdiv() ফাংশনের ভিতরে DivisionByZeroError ক্যাচ এবং রিপোর্ট করেছি।