PHP: Exception Handling কি এবং কেন গুরুত্বপূর্ণ? একটি সহজ ব্যাখ্যা

Abu Sayed
4 min readFeb 18, 2024

--

এই পোস্টটি PHP এক্সেপশন হ্যান্ডলিং নিয়ে একটি অনাবিল দৃষ্টিভঙ্গী উপস্থাপন করে। এটি কোন সমস্যা হতে পারে, কেন এটি গুরুত্বপূর্ণ এবং আপনার কোডে কীভাবে এটি ব্যবহার করবেন তা নিয়ে আলোচনা করা হয়েছে। উদাহরণ এবং একটি ছোট প্রোগ্রাম ব্যবহার করে এটি বুঝতে সহজ করা হয়েছে। ( PHP: Exception Handling )

PHP তে Exception Handling ব্যবহারের সহজ বাংলা ব্যাখ্যা

ব্রো, আপনি কি জানেন PHP-তে এক্সেপশন হ্যান্ডলিং কেন গুরুত্বপূর্ণ?

আচ্ছা বন্ধু, শোনো, আমি জানি তুমি একজন অভিজ্ঞ ডেভেলপার, কিন্তু আসো একটু থামি এবং PHP এর এক্সেপশন হ্যান্ডলিংয়ের নিয়ে কথা বলি। আপনার এটি খুবই কাজে লাগতে পারে।

কী হচ্ছে যখন একটা সমস্যা ঘটে?

চিন্তা করুন, আপনার অ্যাপ্লিকেশন চলছে। এরপর হঠাৎ করেই কিছু একটা ভুল হয়। কোনও ফাইল খুলতে ভুল হচ্ছে, অথবা ডাটাবেজে কোনও সমস্যা আছে। এইসব ভুলগুলোকে আমরা “Exception” বা “Error” বলি। যদি আপনি এগুলোকে ঠিকমতো হ্যান্ডেল না করেন তাহলে আপনার অ্যাপ বন্ধ হয়ে যাবে এবং ইউজাররা বিরক্ত হবে।

একটা উদাহরণ দেখা যাক

<?php
$file = fopen('missing_file.txt', 'r');
// কিন্তু যদি এই ফাইলটি না থাকে?

এখানে আমরা একটি ফাইল খুলতে চেয়েছি যেটি মৌজুদ নেই। তাই এটি একটি এক্সেপশন তৈরি করবে। তবে যদি আমরা এটি ঠিকমত হ্যান্ডেল না করি তাহলে প্রোগ্রামটি বন্ধ হয়ে যাবে এবং ইউজাররা একটা বাগ দেখবে।

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

একটু ভাবুন। আপনি কি চান আপনার ইউজারদের একটা বাগ বা এরর মেসেজ দেখতে? আর মজার বিষয় হল, অনেক সময় এই এরর মেসেজগুলো খুব একটা বোধগম্য হয় না। সে ক্ষেত্রে ইউজাররা হতাশ হবে এবং হয়তো আপনার অ্যাপ্লিকেশন ছেড়ে দেবে।

তাই আপনার উচিত এই সমস্যাগুলোকে নিজে হ্যান্ডেল করা এবং ইউজারদের একটা সুন্দর, বোধগম্য এরর মেসেজ দেখানো। এতে আপনার অ্যাপের ইউজার এক্সপেরিয়েন্স ভাল থাকবে।

আর একটু গভীরে যাই

এক্সেপশন হ্যান্ডলিংয় শুধু ইউজার এক্সপেরিয়েন্স ভাল রাখার জন্যই নয়, এটি আপনার কোডকেও সহজ করে তোলে। কল্পনা করুন আপনার একটি ফাংশন আছে যেখানে ১০টা ভিন্ন ধরণের সমস্যা ঘটতে পারে। এক্সেপশন ছাড়া আপনাকে সব গুলোর জন্য আলাদা আলাদা চেক করতে হবে। এটি অনেক বেশি কোড লাগবে এবং কোডটি পড়তে অসুবিধা হবে।

আর এক্সেপশন ব্যবহার করলে আপনি শুধু একটা ব্লক try/catch ব্লক লেখা যথেষ্ট। এবং যখনই কোন সমস্যা হবে, আপনি সেটি সহজেই ধরে ফেলতে পারবেন এবং প্রপারভাবে হ্যান্ডেল করতে পারবেন।

কিভাবে এটি করতে হয়?

এখন আসা যাক কীভাবে আপনি এটি আপনার কোডে ব্যবহার করবেন। এটি খুবই সহজ। আপনাকে শুধু try/catch ব্লক ব্যবহার করতে হবে।

try {
// এখানে আপনার কোড লিখুন যেখানে সম্ভাবনা আছে exception হতে পারে
$file = fopen('missing_file.txt', 'r');
}
catch(Exception $e) {
// যদি কোন exception হয় তাহলে এটি এখানে আসবে
echo 'Error: ' . $e->getMessage();
}

এখানে আমরা একটি try ব্লক লিখেছি যেখানে আমরা সেই ফাইল খোলার চেষ্টা করছি। যদি কোনও সমস্যা হয় তাহলে এটি catch ব্লকে চলে যাবে এবং আমরা একটি মেসেজ দেখাব।

কিন্তু এটাই তো সব নয়! আপনি এক্সেপশন হ্যান্ডলিংয়ের জন্য অনেক কিছু করতে পারেন। উদাহরণস্বরূপ, আপনি নিজের Exception class তৈরি করতে পারেন যেটি আপনার অ্যাপে ব্যবহৃত হবে। আপনি লগিং যোগ করতে পারেন যাতে আপনি দেখতে পান কোন এক্সেপশনগুলো ঘটছে। অথবা আপনি কাস্টম এরর পেজ তৈরি করতে পারেন যেখানে আপনি ইউজারদের দেখাতে পারবেন কি করতে হবে।

একটু আরও নমুনা দেখি

class CustomException extends Exception {
public function errorMessage() {
$errorMsg = 'Error on line ' . $this->getLine() . ' in ' . $this->getFile()
. ': <b>' . $this->getMessage() . '</b>';
return $errorMsg;
}
}
try {
$file = fopen('missing_file.txt', 'r');
}
catch(Exception $e) {
$error = new CustomException($e->getMessage());
echo $error->errorMessage();
}

এখানে আমরা একটি কাস্টম এক্সেপশন ক্লাস তৈরি করেছি যেটি আমাদের একটু আরও ভাল এরর মেসেজ দেখাবে। CustomException এর errorMessage() মেথডটি ফাইলের নাম, লাইন নাম্বার এবং এরর মেসেজটি দেখাবে। এরপর আমরা একটি try/catch ব্লক ব্যবহার করছি যেখানে যদি কোনও সমস্যা হয় তাহলে আমরা আমাদের নিজস্ব CustomException ক্লাসটি ব্যবহার করে সেই এররটি দেখাব।

একটু ফান্কি হওয়া যাক

শেষ অবধি, আসুন একটু ফান্কি হই। এখন আমরা একটু জটিল একটা প্রোগ্রাম লিখব।

class LowBalanceException extends Exception {}
class OverdraftException extends Exception {}
function withdrawal($amount, $balance) {
if ($amount < 0) {
throw new Exception("Amount cannot be negative!");
}
if ($amount > $balance) {
throw new OverdraftException("Not enough money in your account. Current balance: " . $balance);
}
if ($balance - $amount < 1000) {
throw new LowBalanceException("Warning: Balance becoming low after withdrawal. New balance: " . ($balance - $amount));
}
return $balance - $amount;
}
$balance = 2000;try {
$newBalance = withdrawal(500, $balance);
echo "New balance: " . $newBalance;
}
catch(OverdraftException $e) {
echo "Error: " . $e->getMessage();
}
catch(LowBalanceException $e) {
echo "Warning: " . $e->getMessage();
}
catch(Exception $e) {
echo "Error: " . $e->getMessage();
}

এই প্রোগ্রামটি একটা অ্যাকাউন্টের টাকা তোলার সিমুলেশন করে। এখানে আমরা দুইটি নিজস্ব এক্সেপশন ক্লাস তৈরি করেছি: OverdraftException এবং LowBalanceException। এরপর withdrawal ফাংশনটি টাকা তোলার সময় এই এক্সেপশনগুলো তৈরি করবে যদি বিভিন্ন শর্ত মেটে।

উদাহরণস্বরূপ যদি টাকার পরিমাণ নেগেটিভ হয়, সেক্ষেত্রে এটি একটি সাধারণ Exception তৈরি করবে। যদি বর্তমান ব্যালেন্স থেকে টাকা কম হয়, সেক্ষেত্রে OverdraftException হবে। আর যদি টাকা তোলার পর ব্যালেন্স ১০০০ এর নিচে চলে যায়, তখন LowBalanceException হবে।

শেষ অংশটিতে, আমরা একটি try/catch ব্লক ব্যবহার করছি যেখানে আমরা withdrawal ফাংশনটি কল করছি। এবং যদি কোনও এক্সেপশন হয়, তাহলে আমরা সেই অনুযায়ী প্রপারভাবে হ্যান্ডেল করব।

এইভাবে আপনি দেখতে পাচ্ছেন, এক্সেপশন হ্যান্ডলিং আপনার কোডকে আরও পড়ার উপযোগী এবং ব্যবস্থাপনা করা সহজ করে তোলে। আপনি আপনার নিজস্ব এক্সেপশন তৈরি করতে পারেন এবং বিভিন্ন রকম সমস্যাগুলোকে আলাদাভাবে হ্যান্ডেল করতে পারেন।

সারাংশ

সুতরাং বন্ধু, এটাই ছিল PHP এর এক্সেপশন হ্যান্ডলিং নিয়ে একটু আলোচনা। এটি কেন গুরুত্বপূর্ণ, কীভাবে এটি ব্যবহার করতে হয় এবং কিছু উদাহরণ দিয়ে আমরা দেখালাম। আশা করি এখন আপনি বুঝতে পেরেছেন এটি আপনার জন্য কতটা গুরুত্বপূর্ণ। তাই খামকা না ফেলে শিখে ফেলুন এই টপিকটা।

--

--

Abu Sayed

Bangladeshi Full Stack Web Dev, Sys Admin & DevOps Engineer. Skills: Data analysis, SQL, Kubernetes. Python, PHP & Laravel. Me on: bd.linkedin.com/in/imabusayed