ভূমিকা
ভার্সন 7-এর আগে, PHP পার্সার বিভিন্ন কন্ডিশনের প্রতিক্রিয়ায় এরর রিপোর্ট করত। প্রতিটি এরর একটি নির্দিষ্ট প্রিডিফাইনড টাইপের হত। PHP 7 এরর রিপোর্টিং মেকানিজম পরিবর্তন করেছে। પરമ്പরাগত এরর রিপোর্টিংয়ের বদলে, অধিকাংশ এরর এখন এক্সেপশন থ্রো করে রিপোর্ট করা হয়।
যদি এক্সেপশন হ্যান্ডেল না করা থাকে, একটি ফেটাল এরর রিপোর্ট করা হয় এবং তা পরম্পরাগত এরর কন্ডিশনের মত হ্যান্ডেল করা হয়। PHP-এর এরর হায়ারার্কি Throwable ইন্টারফেস থেকে শুরু হয়। সকল প্রিডিফাইনড এরর যেমন ArithmeticError, AssertionError, CompileError এবং TypeError Throwable ইন্টারফেস ইমপ্লিমেন্ট করে ক্লাস। PHP 7-এ Exception-ও Throwable ইন্টারফেস ইমপ্লিমেন্ট করে।
Throwable ইন্টারফেস throw স্টেটমেন্টের মাধ্যমে থ্রো করা যেকোনো অবজেক্টের বেস হিসেবে কাজ করে, যার মধ্যে Error এবং Exception অবজেক্ট অন্তর্ভুক্ত। একটি ইউজার-ডিফাইনড ক্লাস Throwable ইন্টারফেস সরাসরি ইমপ্লিমেন্ট করতে পারে না। বরং, একটি ইউজার-ডিফাইনড এক্সেপশন ক্লাস ডিক্লেয়ার করতে, সেটি অবশ্যই Exception ক্লাস এক্সটেন্ড করতে হবে।
PHP-এর এক্সেপশন হ্যান্ডলিং состоит throw, catch, try স্টেটমেন্ট। এক্সেপশন অবজেক্ট বাড়াতে throw কিওয়ার্ড আছে। থ্রো করা এক্সেপশন catch ব্লক দ্বারা প্রসেস করা হয়। PHP কোড যা потенশিয়ালি এক্সেপশনের জন্য আড়াল, try ব্লকে এনক্লোজ করা থাকে।
এক বা একাধিক catch ব্লক থাকতে পারে বিভিন্ন Exception ক্লাসের ইনস্ট্যান্স ক্যাচ করার জন্য। যখন try ব্লকে কোনো এক্সেপশন ঘটে না, নরমাল এক্সিকিউশন শেষ catch ব্লকের পর চালু থাকে। কিন্তু, যখন try ব্লকে এক্সেপশন থ্রো করা হয়, নেক্সট স্টেটমেন্ট এক্সিকিউট হওয়ার বদলে, PHP এক্সেপশনের টাইপে ম্যাচ করার জন্য একটি catch ব্লক খুঁজে বের করার চেষ্টা করে। যদি কোনো ম্যাচিং catch ব্লক ডিফাইন করা না থাকে, PHP পার্সার Fatal error with Uncaught Exception মেসেজ রিপোর্ট করে।
আপনি finally ব্লকও প্রদান করতে পারেন catch ব্লকের পর বা বদলে। finally ব্লকের কোড সবসময় এক্সিকিউট হবে, এক্সেপশন try ব্লকে ঘটে কিনা তার স্বাধীনভাবে।