PHP Exceptions Handling কি এবং কিভাবে error handle করা যায়

PHP Exceptions Handling মূলত script এর error handle করার জন্য ব্যবহার করা হয়। এখানে Exception বলতে বুঝানো হচ্ছে error কে। object oriented ভাবে PHP তে errors handle করার জন্য Version 5 এ এই PHP Exception Handling টি এসেছে।
এই আর্টিক্যালে আমরা বিভিন্ন রকম error কিভাবে Exception Class এর মাধ্যমে handle করতে হয় তা দেখেব। যেমন-
১। PHP Exceptions Handling এর সাধারন ব্যবহার।
২। কিভাবে custom exception handler তৈরী করতে হয়।

১। PHP Exceptions এর সাধারন ব্যবহার।

PHP তে যখন কোন error হয় তখন বর্তমান script টি error এর ধরন অনুযায়ী execution বন্ধ করে দেয় বা নির্দিষ্ট error দেখায়। আমরা যদি error গুলোকে সঠিকভাবে handle করতে চাই তাহলে আমাদরেকে Exception handle এর সাহায্য নিতে হবে। আর Exception handle করতে হলে আমাদেরকে Exception Class এর সাহায্য নিতে হবে।
Exception করতে হলো আমাদেরকে Exception throw করতে হবে এবং পরবর্তীতে Exception কে catch করতে হবে। মানে, যখন error হবে তখন তা আমরা Exception এর মধ্যে রেখে throw করব এবং পরবর্তীতে দেখাতে হলে catch করে দেখাবো। বুঝা গলে? 🙂
যখন PHP Exception Handle দিয়ে যদি error handle করেন তখন ব্যাপারটি কি ঘটে চলুন দেখে আসি:
যখন কোন Exception throw হয় তখন script এর execution বন্ধ হয়ে যায় এবং তখন PHP “catch” নামরে ব্লকটিকে খোজার চেষ্টা করে। কারন আমরা জানি যে Exception throw হলে catch এর মধ্যে তা দেখাতে হয়, তাই না 🙂
এখন PHP যদি Exception কে catch করতে না পারে তাহলে একটি fatal error দেখাবে এবং সাথে সাথে একটি মেসেজ ও দেখাবে যে “Uncaught Exception”।
চলুন ১টি উদাহরন দেখে আসি। উদাহরনটি এরকম হবে যে, আমরা ১টি function নিব এবং এই function এর কাজ হবে আপনি যদি বিবাহতি হন তাহলে আমাকে ১টি Exception throw করবে আর না হলে কিছুই করবে না। যেমন-

function AreYouMaried( $isMarried ) {
    if( $isMarried == 'yes') {
        throw new Exception(" Opps! You are married :) ");
    }
    return true;
}
AreYouMaried( 'yes' );

এখন এই কোডটি রান করলে আপনার script execution বন্ধ হয়ে যাবে কারন আপনি AreYouMaried নামের function এর parameter হিসেবে yes পাঠিয়েছেন এবং function এর কাজ হলো $isMarried ভ্যারিয়েবলের মান yes হলেই তখন একটি Exception throw করবে।
Exception throw করার নিয়ম হলো –

throw new Exception(" এখানে আপনার মেসেজ টি দিেবেন ");

এখন Exception throw করেছেন কিন্তু catch তো করেন নাই, তাই না? হ্যা, catch করতে হলে আমাদেরকে Try, throw এবং catch এর সাহায্য নিতে হবে।

Try, throw এবং catch কাজ কি?

১। Try ব্লকের মধ্যেই আমাদের function টি লিখতে হবে বা যা দেখাতে চাই তা লিখতে হবে। যদি কোন error হয় তাহলে আমাদের দেওয়া exception টি throw হবে যা কিনা আমরা function এ বলে দিয়ে এসিছি। আর যদি কোন exception না হয় তাহলে সাধারন ভাবে আমরা function এ যা বলে দিব তাই হবে।
২। throw – exception দেখাতে হলে throw কিওয়ার্ডের সাহায্য নিতে হবে। যেমন-

throw new Exception(" আপনার মেসেজে ");

মনে রাখবেন যে throw করলেই একটি catch ব্লক লাগবেই কারন আপনি throw করলেন কিন্তু ধরবেন না, এটা কি হয়:) 🙂
৩। catch – হ্যা, যেহেতেু আমাদেরকে Exception টি ধরতে হবে তার জন্য অবশ্যই catch ব্লকটি লাগবেই। এই catch ব্লকের মধ্যেই আমরা Exception এর message, কত নম্বর লাইনে error টি হয়েছে, কোন File এ হয়েছে তা দেখাতে পারব।
এবার চলুন অমাদের তৈরী করা function টি Try, throw এবং catch ব্লক ব্যবহার করে করি। প্রথমেই আমাদেরকে Try ব্লকের মধ্যে বলতে হবে কি করতে চাই আর catch এর মধ্যে বলতে হবে কি exception দেখাতে চাই (যদি exception হয়)।

try {
    AreYouMaried( 'yes' );
} catch( Exception $error ) {
    $error->getMessage();
}

এখানে, আমরা AreYouMaried( ‘yes’ ) এই function টি ব্যবহার করতে চাচ্ছি। যদি এই function টি কোন Exception throw করে তাহলে catch ব্লকের মধ্যে আমরা তা ধরতে পারব বা দেখাতে পারব।
catch ব্লকটি একটু খেয়াল করলে দেখবেন যে, আমরা Exception ক্লাসটি $error নামে variable কাস্ট করেছি এবং এই Exception ক্লাসের getMessage নামের function টি ব্যবহার করেছি। এই getMessage এর কাজ হলো Exception যে মেসেজ দিয়েছি তা দেখানো।

function AreYouMaried( $isMarried ) {
    if( $isMarried == 'yes') {
        throw new Exception("Opps! You are married :) ");
    }
    return true;
}
try {
    AreYouMaried( 'yes' );
} catch( Exception $error ) {
    $error->getMessage();
}

এখন উপরের কোড টি রান করলে আগের মত script টি বন্ধ হয়ে যাবে না কিন্তু আমাদের দেওয়ার Error মেসেজেটি দেখাবে যা হলো – Opps! You are married :)।
এভাবেই আমরা Try, throw এবং catch ব্যবহার করে Error Handle করতে পারব।

২। কিভাবে custom exception handler তৈরী করতে হয়।

এবার আমরা দেখব যে কিভাবে custom exception handler তৈরী করা যায়। এ জন্য আমােদেরকে প্রথমে ১টি custom class এবং এর ভিতরে ১টি method তৈরী করতে হবে। এই method এর ভিতর ইচ্ছামত আমরা error message গুলো দেখাতে পারব। এই method টি তখনই call হবে যখন কোন exception ঘটবে।
তবে এই custom class অবশ্যই exception class কে extend করতে হবে মানে child class হতে হবে। যেহেতু আমরা exception class কে extend করব সেহতেু আমরা এই exception class এর সকল property এবং method আমরা আমাদের custom class এর মধ্যেই পাবো।
চলুন এবারে কোডে আসা যাক 🙂
আগের উদাহরনরে মত আমরা এখানে একই function টি ব্যবহার করব। প্রথমে আমরা ১ টি custom class এবং তার ভিতরে ১টি method তৈরী করব। যেমন-

class MyCustomException extends Exception {
    public function myCustomErrorMessage() {
        $message = '';
        $message .= '<b>Error on line number:</b> ' . $this->getLine() . '<br/>';
        $message .= '<b>From a file called:</b> ' . $this->getFile() . '<br/>';
        $message .= '<b>Error message is:</b> ' . $this->getMessage() . '<br/>';
        return $message;
    }
}

এখানে আমরা MyCustomException নামে ক্লাস তেরী করে Exception ক্লাসকে extend করেছি। মানে MyCustomException ক্লাসটি এখন Exception ক্লাসের ১টি child ক্লাস। এরপর myCustomErrorMessage নামে ১টি method তৈরী করেছি এবং তার ভিতরে আমরা নিজেদরে মত করে message গুলো সাজিয়েছি। যেমন- কত নম্বার লাইনে error টি হয়েছে, কোন ফাইলে হয়েছে এবং error message টি কি ইত্যাদি।
এখানে $this->getLine(), $this->getFile(), $this->getMessage() মূলত Exception ক্লাসের মেথডস যা কিনা আমরা MyCustomException ক্লাসের MyCustomException নামরে ফাংশনের ভিতর access করতে পারছি।
এখন আমরা উপরে যে ১টি AreYouMaried নামের ফাংশন ব্যবহার করেছি তা মনে আছে? এই AreYouMaried ফাংশনে আমরা exception throw করেছিলাম Exception class এর object তৈরী করে তাই না? এখন আমরা exception throw করব আমাদের MyCustomException ক্লাসের object তৈরী করে যেমন-

function AreYouMaried( $isMarried ) {
    if( $isMarried == 'yes') {
        throw new MyCustomException("Opps! You are married :) ");
    }
    return true;
}

এরপর অমরা try catch ব্লক ব্যবহার করব। এই try ব্লকের ভিতর আমরা AreYouMaried( ‘yes’ ); নামের ফাংশনটি কল করব এবং catch ব্লকে আমাদের তৈরী করা MyCustomException ক্লাসটি $error ভ্যারিয়বলে রাখব। এখন সহজেই আমরা myCustomErrorMessage কল করে error মেসেজেগুলো দেখাতে পারব। যেমন-

try {
    AreYouMaried( 'yes' );
} catch( MyCustomException $error ) {
    echo $error->myCustomErrorMessage();
}

এভাবেই আমরা নিজেদেরে মত করে Custom Exception Handle তৈরী করতে পারব।
ধন্যবাদ, আজ এতটুকু, ভাল লাগলে জানাবেন কিন্তু। 🙂

Leave a Comment