Improved Error Handling এবং Exception Handling PHP 7-এ একটি বড় উন্নতি, যা কোডের ত্রুটি ধরতে ও সেগুলো সমাধান করতে ডেভেলপারদের আরও কার্যকর ও সহজ পদ্ধতি প্রদান করে। PHP 7 থেকে Error এবং Exception উভয়ই Throwable ইন্টারফেস ব্যবহার করে ক্যাচ করা যায়, যা পূর্ববর্তী সংস্করণের তুলনায় Error এবং Exception Handling আরও উন্নত ও কার্যকর করেছে।
PHP 7-এর Error Handling এবং Exception Handling এর প্রধান উন্নয়ন
PHP 7 এ, ত্রুটি (Errors) আর Exception এর মতোই কাজ করে এবং এগুলোকে Throwable ইন্টারফেসের অধীনে নিয়ে আসা হয়েছে, যা try-catch ব্লকের মাধ্যমে ক্যাচ করা সম্ভব। ফলে মারাত্মক ত্রুটি (যেমন Parse Errors, Fatal Errors) যেগুলো পূর্বে ক্যাচ করা যেত না, সেগুলোও এখন Exception এর মতো হ্যান্ডল করা যায়। এই উন্নতির ফলে ডেভেলপাররা একক পদ্ধতিতে সমস্ত ত্রুটি এবং ব্যতিক্রম হ্যান্ডল করতে পারে।
Throwable Interface
Throwable হলো PHP 7-এ নতুন সংযোজিত একটি ইন্টারফেস, যা Exception এবং Error উভয়কেই অন্তর্ভুক্ত করে। এর মাধ্যমে try-catch ব্লকের মাধ্যমে সব ধরনের ত্রুটি এবং Exception হ্যান্ডল করা যায়।
Throwable Interface এর উদাহরণ
<?php
try {
// এখানে ত্রুটি সৃষ্টি হতে পারে এমন কোড
throw new Exception("This is an exception!");
} catch (Throwable $e) {
echo "Caught Throwable: " . $e->getMessage();
}
?>এখানে Throwable ইন্টারফেসের মাধ্যমে Exception ক্যাচ করা হয়েছে। একই পদ্ধতিতে ত্রুটিও ক্যাচ করা যায়, যা পূর্বে PHP 5-এ সম্ভব ছিল না।
Error এবং Exception Handling এর প্রধান পরিবর্তনসমূহ
- Engine Exceptions: PHP 7 থেকে মারাত্মক ত্রুটিগুলি
Errorক্লাসের মাধ্যমে থ্রো করা হয়। এর ফলে মারাত্মক ত্রুটিtry-catchব্লকের মাধ্যমে হ্যান্ডল করা সম্ভব হয়, যা পূর্বে সরাসরি স্ক্রিপ্ট বন্ধ করে দিত। - TypeError Exception: PHP 7-এ Type Hinting ও Return Type Declarations এর ব্যবহার বাড়ানোর ফলে TypeError নামে একটি নতুন Exception যুক্ত করা হয়েছে। যদি কোন ফাংশন বা মেথডে ভুল টাইপের ডেটা পাস করা হয়, তাহলে
TypeErrorException থ্রো হয়। - ArithmeticError এবং DivisionByZeroError: PHP 7-এ গণনা সংক্রান্ত ত্রুটি হ্যান্ডল করার জন্য ArithmeticError এবং বিশেষভাবে DivisionByZeroError যুক্ত করা হয়েছে। Division by zero-এর মতো ত্রুটি ক্যাচ করা এখন সম্ভব।
- ParseError: Syntax সংক্রান্ত ত্রুটিগুলি
ParseErrorException থ্রো করে। এটি সাধারণত কোডের সিনট্যাক্স ভুল হলে ক্যাচ করা যায়।
Improved Error Handling উদাহরণ
TypeError Exception Handling
<?php
function add(int $a, int $b): int {
return $a + $b;
}
try {
echo add("10", 20); // TypeError: প্রথম আর্গুমেন্টে স্ট্রিং ব্যবহার করা হয়েছে
} catch (TypeError $e) {
echo "Caught TypeError: " . $e->getMessage();
}
?>এখানে TypeError Exception ক্যাচ করে ত্রুটি হ্যান্ডল করা হয়েছে। টাইপ সুনির্দিষ্ট না থাকলে TypeError প্রদর্শিত হবে এবং এটি try-catch ব্লকের মাধ্যমে ক্যাচ করা যাবে।
DivisionByZeroError Handling
<?php
try {
$result = 10 / 0;
} catch (DivisionByZeroError $e) {
echo "Caught DivisionByZeroError: " . $e->getMessage();
}
?>এখানে DivisionByZeroError Exception ক্যাচ করা হয়েছে। শূন্য দিয়ে ভাগ করতে গেলে PHP ত্রুটি থ্রো করে, যা DivisionByZeroError দ্বারা ক্যাচ করা সম্ভব।
ParseError Handling
<?php
try {
eval('echo "Hello;'); // সিনট্যাক্স ভুল আছে, ফলে ParseError হবে
} catch (ParseError $e) {
echo "Caught ParseError: " . $e->getMessage();
}
?>এখানে ParseError Exception ক্যাচ করা হয়েছে, যেটি eval() ফাংশনে ভুল সিনট্যাক্স থাকলে থ্রো হয়।
Throwable এবং Error Handling এ ভালো প্র্যাকটিস
- Throwable ইন্টারফেস ব্যবহার করা: সমস্ত Exception এবং Error ক্যাচ করার জন্য
Throwableইন্টারফেস ব্যবহার করা উচিত, যা কোডকে আরও স্থিতিশীল ও নিরাপদ করে। - বিশেষ Exception ধরার চেষ্টা করা: যেমন
TypeError,ParseError,DivisionByZeroErrorইত্যাদি বিশেষ Exception আলাদা করে ক্যাচ করা উচিত, কারণ এগুলো নির্দিষ্ট ত্রুটি নির্দেশ করে। - Custom Exception ব্যবহার করা: নির্দিষ্ট পরিস্থিতির জন্য কাস্টম Exception তৈরি করা একটি ভালো প্র্যাকটিস, যা ত্রুটিগুলো আরও কার্যকরভাবে হ্যান্ডল করতে সহায়ক।
- ত্রুটির লগ রাখা: প্রোডাকশনে ত্রুটি প্রকাশ না করার জন্য, ত্রুটির বার্তাগুলো লগ ফাইলে সংরক্ষণ করা উচিত। এর ফলে পরে ত্রুটিগুলো বিশ্লেষণ করে সমাধান করা যায়।
সারসংক্ষেপ
PHP 7-এর Improved Error and Exception Handling ডেভেলপারদের জন্য ত্রুটি হ্যান্ডলিং আরও সহজ, কার্যকর এবং নিরাপদ করে তুলেছে। Throwable ইন্টারফেসের মাধ্যমে এখন সব ধরনের ত্রুটি ক্যাচ করা সম্ভব, যা পূর্বে PHP 5-এ সম্ভব ছিল না। নতুন Error ক্লাস (যেমন TypeError, DivisionByZeroError, এবং ParseError) এর মাধ্যমে নির্দিষ্ট ত্রুটিগুলো হ্যান্ডল করা সহজ হয়েছে। Error Handling এর এই উন্নতি কোডের কার্যকারিতা বৃদ্ধি করে এবং PHP কোডকে আরও স্থিতিশীল এবং নিরাপদ করে তোলে।
PHP 7 থেকে Engine Exceptions এবং Throwable Interface যুক্ত করা হয়েছে, যা ত্রুটি হ্যান্ডলিংয়ে নতুন মাত্রা যোগ করেছে। PHP 7 এর পূর্বে মারাত্মক ত্রুটি (fatal errors) বা parse errors সাধারণত প্রোগ্রামকে থামিয়ে দিতো এবং Exception হ্যান্ডলার ব্যবহার করেও এই ধরনের ত্রুটি ধরা যেত না। PHP 7 থেকে, এই ত্রুটিগুলিকে Engine Exceptions আকারে হ্যান্ডল করা যায় এবং Throwable ইন্টারফেস ব্যবহার করে আরও উন্নত ত্রুটি নিয়ন্ত্রণ সম্ভব হয়।
Engine Exceptions
Engine Exceptions PHP 7 এ চালু হয়েছে, যা মারাত্মক ত্রুটি বা runtime errors কে Exception আকারে ধরতে সক্ষম করে। PHP 7 এর পূর্বে, runtime errors বা syntax errors সরাসরি স্ক্রিপ্ট থামিয়ে দিত এবং ডেভেলপাররা এই ত্রুটিগুলি try-catch ব্লক দিয়ে হ্যান্ডল করতে পারত না। তবে PHP 7 থেকে এসব ত্রুটি Error শ্রেণির অধীনে Throwable ইন্টারফেসের মাধ্যমে ধরার সুযোগ দেয়।
Engine Exceptions এর উদাহরণ
<?php
try {
// Intentional error: dividing by zero
echo 10 / 0;
} catch (Error $e) {
echo "Caught an engine error: " . $e->getMessage();
}এখানে, 10 / 0 দ্বারা Division by zero ত্রুটি তৈরি করা হয়েছে। PHP 7 এ এই ত্রুটি একটি Error এক্সেপশনে পরিণত হয়েছে, যা try-catch ব্লকের মধ্যে ধরা যাচ্ছে এবং Error শ্রেণি দ্বারা হ্যান্ডল করা সম্ভব হয়েছে।
Throwable Interface
Throwable Interface একটি parent ইন্টারফেস, যা PHP তে Exception এবং Error উভয়কেই ধরতে ব্যবহার করা যায়। PHP 7 এর পূর্বে, Exception দ্বারা try-catch ব্লকে শুধুমাত্র Exception শ্রেণির অধীনে থাকা ত্রুটিগুলিকেই ধরা যেত। তবে PHP 7 এ Throwable ইন্টারফেস প্রবর্তনের মাধ্যমে Exception এবং Error উভয় ধরনের ত্রুটিই একই ব্লকের মধ্যে ধরা সম্ভব।
Throwable Interface এর ব্যবহার
<?php
try {
// Intentional error: undefined function
undefinedFunction();
} catch (Throwable $t) {
echo "Caught a throwable error: " . $t->getMessage();
}এখানে, undefinedFunction() ফাংশনটি অপ্রাপ্ত এবং এটি একটি Error তৈরি করবে, যা Throwable ইন্টারফেস ব্যবহার করে try-catch ব্লকের মধ্যে ধরা যাচ্ছে।
Throwable Interface এর সুবিধা
- সমস্ত ত্রুটি হ্যান্ডলিং: Throwable ইন্টারফেস ব্যবহার করে
ExceptionএবংErrorউভয়ই হ্যান্ডল করা যায়, ফলে সমস্ত ত্রুটি একসাথে হ্যান্ডল করা সম্ভব। - একত্রে ত্রুটি নিয়ন্ত্রণ:
Throwableইন্টারফেসের মাধ্যমে সমস্ত ধরনের ত্রুটিকে একটিtry-catchব্লকের মধ্যে হ্যান্ডল করা যায়। - কোডের গুণগত মান বৃদ্ধি: এটি কোডের গুণগত মান বাড়ায় এবং ত্রুটি নিয়ন্ত্রণের জন্য একটি কেন্দ্রীভূত পদ্ধতি প্রদান করে।
Engine Exceptions এবং Throwable Interface এর পার্থক্য
| বৈশিষ্ট্য | Engine Exceptions | Throwable Interface |
|---|---|---|
| কাজ | মারাত্মক ত্রুটি বা runtime errors ক্যাপচার করে | সমস্ত Exception ও Error ক্যাপচার করে |
| সৃষ্ট কারণ | Division by zero, undefined function, memory limit exceeded | Exception বা Error উভয় ধরনের ত্রুটি |
| ব্যবহার | Error শ্রেণির অধীনে কাজ করে | Throwable ইন্টারফেস দ্বারা হ্যান্ডল করা যায় |
| try-catch হ্যান্ডলিং | সরাসরি try-catch ব্লকে হ্যান্ডল করা যায় | সমস্ত ত্রুটি try-catch ব্লকে হ্যান্ডল করা যায় |
Engine Exceptions এবং Throwable Interface এর ব্যবহার ক্ষেত্র
- Runtime Errors হ্যান্ডল:
Division by zero,undefined functions, এবং অন্যান্য মারাত্মক ত্রুটি হ্যান্ডল করার জন্যErrorশ্রেণির মাধ্যমেEngine Exceptionsব্যবহৃত হয়। - সমস্ত ত্রুটি একত্রে হ্যান্ডল:
Throwableইন্টারফেসের মাধ্যমেExceptionএবংErrorউভয় ধরনের ত্রুটিই ধরা যায়, যা বড় এবং জটিল প্রজেক্টে কোডের ত্রুটি নিয়ন্ত্রণ সহজ করে। - ডেভেলপারদের জন্য সুবিধাজনক:
Throwableইন্টারফেসের মাধ্যমে সব ধরনের ত্রুটি একটি কেন্দ্রীভূত পদ্ধতিতে হ্যান্ডল করা যায়, যা কোড রিডেবিলিটি এবং রক্ষণাবেক্ষণ সহজ করে।
উদাহরণ: Throwable Interface এর মাধ্যমে Exception এবং Error একত্রে হ্যান্ডল করা
<?php
function divide($a, $b) {
if ($b === 0) {
throw new Exception("Cannot divide by zero");
}
return $a / $b;
}
try {
echo divide(10, 0);
undefinedFunction(); // Intentional undefined function to trigger an error
} catch (Throwable $t) {
echo "Caught an error or exception: " . $t->getMessage();
}
?>এখানে divide ফাংশন একটি Exception ছুড়ে দেয়, কারণ divide by zero সম্ভব নয়। পরবর্তীতে, undefinedFunction() একটি Error তৈরি করে। Throwable ইন্টারফেস ব্যবহার করে try-catch ব্লক উভয়ই হ্যান্ডল করতে সক্ষম হয়েছে।
সারসংক্ষেপ
Engine Exceptions এবং Throwable Interface PHP 7 তে ত্রুটি হ্যান্ডলিংকে আরও উন্নত এবং কার্যকর করেছে। Engine Exceptions মারাত্মক runtime errors ক্যাপচার করতে সক্ষম, যেখানে Throwable Interface এর মাধ্যমে Exception এবং Error উভয় ধরনের ত্রুটি একত্রে হ্যান্ডল করা যায়। এর ফলে PHP তে ত্রুটি নিয়ন্ত্রণ আরও সহজ এবং কেন্দ্রীভূত হয়েছে, যা বড় প্রজেক্টে কোডের নিরাপত্তা এবং কার্যকারিতা বৃদ্ধি করে।
Error এবং Exception PHP তে দুটি আলাদা ধরনের সমস্যা বা ত্রুটি প্রতিনিধিত্ব করে, তবে এদের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে। যেহেতু PHP 7-এ Error Handling ও Exception Handling আরও শক্তিশালী হয়েছে, তাই এই দুইয়ের মধ্যে পার্থক্য বুঝে কোডে সঠিকভাবে ত্রুটি মোকাবিলা করা গুরুত্বপূর্ণ।
১. Error এবং Exception কী?
- Error: একটি
Errorহলো সাধারণত এমন ত্রুটি যা কোডের ভুল বা ত্রুটির কারণে ঘটে এবং এটি PHP ইঞ্জিন দ্বারা অটোমেটিকভাবে ধরা হয়।Errorসাধারণত কোডের স্তরের গণ্ডি ছাড়িয়ে যায় এবং সিস্টেমের গুরুতর সমস্যা নির্দেশ করে (যেমন মেমরি সমস্যা, ফাইল সিস্টেমের সমস্যা ইত্যাদি)। - Exception: একটি
Exceptionহলো এমন একটি সমস্যা যা আপনার কোডের মধ্যে ঘটতে পারে এবং আপনি নিজে তা ধরতে পারেন। এটি সাধারণত নিয়মিত, মানানসই ত্রুটি যা আপনার কোডের মধ্যে এক্সপেক্টেড হওয়া উচিত এবং এটি হ্যান্ডল করা যেতে পারে।Exceptionসাধারণতtry-catchব্লক দিয়ে হ্যান্ডল করা হয়।
২. Error এবং Exception এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Error | Exception |
|---|---|---|
| ভুল টাইপ | Error সাধারণত ফ্যাটাল বা সিস্টেম সম্পর্কিত ত্রুটি যা সাধারণত সরাসরি সংশোধন করা যায় না। | Exception আপনার কোডের মধ্যে সৃষ্ট সমস্যাগুলির জন্য ব্যবহৃত হয় এবং এটির জন্য আপনার কোডের মধ্যে ত্রুটি হ্যান্ডলিং সরবরাহ করা সম্ভব। |
| ধরার সময় | Errors স্বয়ংক্রিয়ভাবে PHP দ্বারা ধরা হয় এবং আপনার কোড চলতে থাকা অবস্থায় সেগুলো ঘটতে পারে। | Exceptions সাধারণত আপনার কোডে বিশেষভাবে প্রোগ্রাম করা হয় এবং যখন তা ঘটে তখন তা try-catch ব্লক দ্বারা ধরা যায়। |
| ধরার ক্ষমতা | Error ক্লাস দ্বারা সম্পূর্ণভাবে ধরা যায় না, এবং এক্সেপশন হ্যান্ডলিংয়ের জন্য try-catch ব্লক ব্যবহার করা যায় না। | Exception ক্লাস দ্বারা ধরা যায় এবং try-catch ব্লক ব্যবহার করে হ্যান্ডল করা যায়। |
| প্রধান উদাহরণ | মেমরি লিমিট Exceeded, OutOfMemoryError, FatalError ইত্যাদি | Exception, PDOException, IOException, RuntimeException ইত্যাদি। |
| ফ্যাটাল/নন-ফ্যাটাল | বেশিরভাগ Error গুলি ফ্যাটাল হয় (যেগুলি সাধারণত কোড চালানোর ক্ষমতা বন্ধ করে দেয়)। | Exception গুলি সাধারণত নন-ফ্যাটাল হয় এবং সেগুলি হ্যান্ডল করা সম্ভব। |
| ধরার উপায় | Error এর জন্য catch ব্লক ব্যবহৃত হয় না। এর পরিবর্তে, আপনি set_error_handler() বা ErrorException ব্যবহার করতে পারেন। | Exception সাধারণভাবে try-catch ব্লক দ্বারা ধরা হয়। |
৩. Error Handling এবং Exception Handling
Error Handling (PHP 7 এর পর)
PHP 7 থেকে Error এবং Exception এর মধ্যে আরও পার্থক্য করা হয়েছে। আগের PHP সংস্করণে, Error এবং Exception একসাথে হ্যান্ডল করা হত, কিন্তু PHP 7 থেকে Error ক্লাস নতুনভাবে তৈরি করা হয়েছে, এবং এটি Throwable ইন্টারফেস দ্বারা অ্যাক্সেসযোগ্য।
Error Handling উদাহরণ:
<?php
try {
// কিছু কোড যা `Error` তৈরি করতে পারে
$file = fopen("non_existent_file.txt", "r");
} catch (Throwable $e) {
echo "Caught an error: " . $e->getMessage();
}
?>এখানে Throwable ইন্টারফেস ব্যবহার করা হয়েছে, যা এখন Error এবং Exception উভয়কেই ধরতে সক্ষম।
Exception Handling
Exception Handling একটি সাধারণ পদ্ধতি যেখানে আপনি try-catch ব্লক ব্যবহার করে আপনার কোডের মধ্যে সৃষ্ট সমস্যা মোকাবিলা করতে পারেন।
Exception Handling উদাহরণ:
<?php
try {
// কিছু কোড যা `Exception` তৈরি করতে পারে
if (!file_exists("example.txt")) {
throw new Exception("File not found.");
}
} catch (Exception $e) {
echo "Caught an exception: " . $e->getMessage();
}
?>এখানে throw ব্যবহার করে Exception তৈরি করা হয়েছে এবং catch ব্লক দ্বারা তা হ্যান্ডল করা হয়েছে।
৪. Error এবং Exception এর প্রয়োগ ক্ষেত্র
- Error: সাধারণত সিস্টেমের গুরুতর ত্রুটিগুলোর জন্য ব্যবহৃত হয় যা কোডের চলাচলে বাধা সৃষ্টি করে। উদাহরণস্বরূপ, যদি আপনার কোড মেমরি লিমিট অতিক্রম করে বা কোনো অপরিহার্য ফাইল খোলার চেষ্টা করে, তখন PHP একটি
Errorছুড়ে দেবে। এই ধরনের ত্রুটি আপনার কোডের কাজকে বন্ধ করে দেয়। - Exception: এমন ত্রুটি যা আপনার কোডের মধ্যে কিছু ভুল বা অবৈধ প্রবাহের কারণে ঘটতে পারে, সেগুলোর জন্য
Exceptionব্যবহার করা হয়। উদাহরণস্বরূপ, যদি আপনি একটি ডাটাবেসে কানেকশন করতে ব্যর্থ হন বা কোনো নির্দিষ্ট ফাইল খুঁজে না পান, তবে এটি একটিExceptionতৈরি করতে পারে, এবং আপনি এটি হ্যান্ডল করতে পারেন।
সারসংক্ষেপ
- Error সাধারণত গুরুতর সমস্যা যা কোডের কাজ বন্ধ করে দেয়, যেমন মেমরি সীমা অতিক্রম, এবং এটি সাধারণত
Throwableইন্টারফেস দ্বারা হ্যান্ডল করা হয়। - Exception সাধারণত কোডের মধ্যে প্রত্যাশিত সমস্যা বা ভুল যা
try-catchব্লক দ্বারা হ্যান্ডল করা যায়। - PHP 7-এ,
ErrorএবংExceptionআলাদাভাবে চিহ্নিত করা হয়েছে, এবংThrowableইন্টারফেস দ্বারা উভয়কেই হ্যান্ডল করা সম্ভব। ErrorএবংExceptionএর মধ্যে প্রধান পার্থক্য হল যে Error গুলি সাধারণত ফ্যাটাল (এগুলি কোডের কাজ বন্ধ করে দেয়), এবং Exception গুলি সাধারণত নন-ফ্যাটাল (এগুলি হ্যান্ডল করা যায়)।
এই পার্থক্যগুলো বুঝে, আপনি PHP তে ত্রুটি হ্যান্ডলিং যথাযথভাবে করতে পারবেন।
PHP-তে Exception Hierarchy এবং Fatal Errors এর হ্যান্ডলিং একটি গুরুত্বপূর্ণ বিষয়, যা আপনার কোডের স্থিতিশীলতা এবং নিরাপত্তা নিশ্চিত করতে সহায়ক। এই দুটি ধারণা একে অপরের থেকে আলাদা, তবে উভয়ই সঠিকভাবে হ্যান্ডল করা প্রয়োজন।
১. Exception Hierarchy (এক্সেপশন হায়ারার্কি)
PHP তে Exception একটি অবজেক্ট যা ইন্ডিকেট করে যে কোডের কোনও অংশে সমস্যা হয়েছে। PHP তে Exception এবং Error দুটি প্রধান শ্রেণী রয়েছে যা কোডের মধ্যে ত্রুটি চিহ্নিত করে। PHP তে Exception ক্লাসের ভিতরে অনেকগুলো সাবক্লাস রয়েছে, যা বিশেষ ধরনের ত্রুটির জন্য ব্যবহৃত হয়।
Exception Hierarchy
PHP তে Exception ক্লাসের একটি হায়ারার্কি রয়েছে, যেখানে Exception শ্রেণী মূল শ্রেণী এবং তার অধীনে আরও নির্দিষ্ট ধরণের এক্সেপশন শ্রেণী রয়েছে। এই এক্সেপশন শ্রেণীগুলি ব্যবহারকারীকে কোডের মধ্যে ত্রুটি শনাক্ত এবং হ্যান্ডল করতে সহায়ক।
Exception Hierarchy এর কাঠামো:
Throwable
├── Exception
│ ├── LogicException
│ │ └── InvalidArgumentException
│ └── RuntimeException
└── Error
├── CompileError
├── ParseError
└── TypeError- Throwable: এটি PHP তে
ErrorএবংExceptionএর অভিভাবক শ্রেণী। - Exception: এটি PHP তে সমস্ত সাধারণ এক্সেপশনগুলির মূল শ্রেণী।
- RuntimeException: সাধারণত রানটাইমে ঘটে এমন সমস্যা যেমন সংস্থান না পাওয়া বা ফাইল খোলার সমস্যা।
- LogicException: এটি সাধারণত কোডের লজিকাল ত্রুটির জন্য ব্যবহৃত হয়, যেমন ভুল প্যারামিটার।
- InvalidArgumentException: এটি বিশেষভাবে ব্যবহার করা হয় যখন একটি ফাংশনে ভুল প্যারামিটার পাস করা হয়।
Example of Exception Hierarchy
<?php
class CustomException extends Exception {}
try {
throw new CustomException("This is a custom exception");
} catch (CustomException $e) {
echo "Caught CustomException: " . $e->getMessage();
} catch (Exception $e) {
echo "Caught generic Exception: " . $e->getMessage();
}
?>এখানে, CustomException একটি কাস্টম এক্সেপশন ক্লাস, যা Exception ক্লাস থেকে উত্তরাধিকারসূত্রে এসেছে। PHP তে এক্সেপশন হ্যান্ডলিংয়ে try-catch ব্লক ব্যবহৃত হয়, যেখানে আপনি বিশেষ এক্সেপশন শ্রেণী (যেমন CustomException) ধরতে পারেন এবং এরপর সেটি হ্যান্ডল করতে পারেন।
২. Fatal Errors এর হ্যান্ডলিং
PHP তে Fatal Errors হল এমন ত্রুটি যা কোডের নির্বাহ বন্ধ করে দেয় এবং PHP স্ক্রিপ্টটি পুরোপুরি থামিয়ে দেয়। Fatal Errors সাধারণত কোডের ভুল সিনট্যাক্স বা অপর্যাপ্ত ফাংশন কলের কারণে ঘটে।
PHP-তে fatal errors সাধারণত Compile Error এবং Parse Error এর মতো ঘটতে পারে, এবং সেগুলিকে Exception দিয়ে হ্যান্ডল করা সম্ভব নয়, কারণ এটি কোডের সম্পূর্ণ কার্যক্ষমতাকে প্রভাবিত করে।
Fatal Error উদাহরণ
<?php
function testFunction() {
echo "This is a test function";
}
testFunction(); // Function is called correctly
nonExistentFunction(); // Fatal error, because this function doesn't exist
?>এখানে, nonExistentFunction() কল করলে একটি Fatal Error ঘটবে কারণ সেই ফাংশনটি ডিফাইন করা নেই।
Fatal Errors হ্যান্ডলিং
PHP তে Fatal Error গুলি সাধারণত try-catch ব্লকের মধ্যে ধরা যায় না। তবে, আপনি ErrorException ব্যবহার করে Fatal Errors হ্যান্ডল করতে পারেন এবং set_error_handler() ফাংশন দিয়ে কাস্টম এরর হ্যান্ডলার তৈরি করতে পারেন।
Example: Handling Fatal Errors using set_error_handler()
<?php
function customErrorHandler($errno, $errstr, $errfile, $errline) {
echo "Custom Error: [$errno] $errstr - $errfile:$errline";
}
set_error_handler("customErrorHandler");
function test() {
echo $undefinedVariable; // Notice error will be caught by the custom error handler
}
test();
?>এখানে, set_error_handler() ফাংশনটি একটি কাস্টম এরর হ্যান্ডলার সেট করে যা Notice বা Warning এররগুলো হ্যান্ডল করতে সক্ষম। কিন্তু Fatal Errors (যেমন ফাংশন না থাকা বা সঠিক সিনট্যাক্স না থাকা) try-catch ব্লকের মাধ্যমে ধরা সম্ভব নয়, শুধুমাত্র কাস্টম এরর হ্যান্ডলার ব্যবহার করে এগুলিকে ক্যাচ করা সম্ভব।
Handling Fatal Errors via register_shutdown_function()
Fatal errors এর জন্য আপনি register_shutdown_function() ব্যবহার করে একটি কাস্টম ফাংশন নিবন্ধন করতে পারেন, যাতে স্ক্রিপ্ট বন্ধ হওয়ার আগে fatal error গুলি হ্যান্ডল করা যায়।
<?php
function shutdownFunction() {
$error = error_get_last();
if ($error !== NULL) {
echo "Fatal Error: " . $error['message'];
}
}
register_shutdown_function('shutdownFunction');
function testFatalError() {
nonExistentFunction(); // This will trigger a fatal error
}
testFatalError();
?>এখানে, shutdownFunction() ফাংশনটি register_shutdown_function() এর মাধ্যমে রেজিস্টার করা হয়েছে, যা PHP স্ক্রিপ্ট শেষ হওয়ার আগে ফ্যাটাল এররগুলিকে ক্যাচ এবং প্রক্রিয়া করতে ব্যবহৃত হয়।
সারসংক্ষেপ
- Exception Hierarchy: PHP তে
ExceptionএবংErrorশ্রেণীর মধ্যে একটি হায়ারার্কি রয়েছে।Exceptionসাধারণ এক্সেপশনগুলির জন্য ব্যবহৃত হয় এবংErrorগুরুতর ত্রুটির জন্য ব্যবহৃত হয়। - Fatal Errors: PHP তে Fatal Errors হল এমন ত্রুটি যা স্ক্রিপ্টের কার্যকারিতা থামিয়ে দেয় এবং এটি সাধারণত try-catch ব্লক দ্বারা হ্যান্ডল করা যায় না। তবে, আপনি set_error_handler() এবং register_shutdown_function() ব্যবহার করে ফ্যাটাল এরর হ্যান্ডলিং করতে পারেন।
Exception Handling এবং Fatal Errors হ্যান্ডলিং সঠিকভাবে করতে পারলে, আপনার PHP অ্যাপ্লিকেশন আরও স্থিতিশীল এবং নিরাপদ হয়।
TypeError এবং ParseError PHP 7-এর দুটি গুরুত্বপূর্ণ ত্রুটি শ্রেণি (Error Classes) যা কোডের নির্ভুলতা এবং নিরাপত্তা নিশ্চিত করতে সহায়ক। এই দুটি ত্রুটি ফাংশন বা এক্সপ্রেশন ব্যবহারে ভুল টাইপের ডেটা বা ভুল সিনট্যাক্সের কারণে ঘটে। PHP 7 থেকে এই ত্রুটিগুলি আরও কঠোরভাবে সংজ্ঞায়িত হয়েছে এবং ডেভেলপারদের কোডে ভুল শনাক্ত করা সহজ করেছে।
এখানে আমরা এই দুটি ত্রুটির মধ্যে পার্থক্য এবং তাদের ব্যবহারের ক্ষেত্রগুলি বিস্তারিতভাবে আলোচনা করব।
TypeError (টাইপ ত্রুটি)
TypeError একটি বিশেষ ধরনের ত্রুটি যা ঘটে যখন ফাংশনে বা মেথডে ভুল টাইপের মান পাস করা হয়। PHP 7-এ TypeError একটি Throwable ইন্টারফেস বাস্তবায়নকারী একটি শ্রেণি (class), এবং এটি বিশেষভাবে Strict Mode এবং Type Hinting ব্যবহারের সময় ঘটে।
TypeError এর কারণ:
- টাইপ ডিক্লারেশন অনুযায়ী ফাংশনে সঠিক টাইপের আর্গুমেন্ট না পাঠানো হলে।
- ফাংশনের রিটার্ন টাইপ মেলেনি।
TypeError উদাহরণ:
<?php
declare(strict_types=1);
function addNumbers(int $a, int $b): int {
return $a + $b;
}
echo addNumbers(5, "10"); // TypeError: strict mode সক্রিয় থাকায় টাইপ কনভার্শন হবে না
?>এখানে, addNumbers ফাংশনে int টাইপ ডিক্লারেশন করা হয়েছে, তবে "10" একটি স্ট্রিং। strict mode সক্রিয় থাকায়, PHP একটি TypeError ছুড়ে দিবে কারণ "10" একটি স্ট্রিং এবং এটি int-এ কনভার্ট করা যাবে না।
TypeError Handling:
TypeError হ্যান্ডল করতে, আপনি try-catch ব্লক ব্যবহার করতে পারেন।
<?php
declare(strict_types=1);
function divide(int $a, int $b): float {
return $a / $b;
}
try {
echo divide(5, "10"); // TypeError: strict mode সক্রিয় থাকায় টাইপ কনভার্শন হবে না
} catch (TypeError $e) {
echo "Caught TypeError: " . $e->getMessage();
}
?>এখানে, divide ফাংশনে টাইপ mismatch হওয়ায় TypeError ক্যাচ করা হয়েছে।
ParseError (পার্স ত্রুটি)
ParseError তখন ঘটে যখন কোডে সঠিক সিনট্যাক্স নেই বা ভুল সিনট্যাক্স ব্যবহার করা হয়েছে। এটি সাধারণত তখন ঘটে যখন PHP কোডটি পার্স (parse) করার সময় সিনট্যাক্স ভুল থাকে, যেমন ফাংশনের নামের পরে কলন না থাকা, বন্ধনী ভুলভাবে লেখা, বা কোটেশন সঠিক না হওয়া।
ParseError এর কারণ:
- ভুল সিনট্যাক্স, যেমন ভুল ব্র্যাকেট ব্যবহার, ভুল পদ্ধতিতে ফাংশন বা মেথড কল করা ইত্যাদি।
- কোডের মধ্যে অবৈধ অক্ষর বা কোটেশন সঠিকভাবে ব্যবহার না করা।
ParseError উদাহরণ:
<?php
echo "Hello World; // ParseError: Sintax error, unexpected end of file
?>এখানে, echo "Hello World; লাইনটি ভুলভাবে শেষ হয়েছে কারণ স্ট্রিংটি সঠিকভাবে বন্ধ করা হয়নি। PHP কোডটি পার্স করার সময় একটি ParseError ছুড়ে দিবে।
ParseError Handling:
ParseError সাধারণত রানটাইমে না, বরং কোড পার্স করার সময় ঘটে, তাই এটি সাধারণত try-catch ব্লক দিয়ে ক্যাচ করা যায় না। তবে, PHP Error Handler ব্যবহার করে ParseError কনফিগার করা যায়।
TypeError এবং ParseError এর পার্থক্য
| বৈশিষ্ট্য | TypeError | ParseError |
|---|---|---|
| ঘটনার কারণ | ফাংশনে বা মেথডে ভুল টাইপের মান পাস করা হলে। | কোডে ভুল সিনট্যাক্স বা কাঠামো ব্যবহার করা হলে। |
| ঘটনার সময় | রানটাইমে, যখন ফাংশন বা মেথড কল হয়। | কোড পার্স করার সময়। |
| কার্যকারিতা | Strict Mode বা Type Hinting এ টাইপ mismatch হলে ঘটে। | কোডের সিনট্যাক্স ভুল হলে ঘটে। |
| ত্রুটি ধরার উপায় | try-catch ব্লক ব্যবহার করা যায়। | সাধারণত ParseError রUNTIME-এ ক্যাচ করা যায় না, তবে PHP Error Handler ব্যবহার করা যায়। |
| উদাহরণ | টাইপ mismatch যেমন int এর বদলে string প্রদান করা। | ভুল সিনট্যাক্স যেমন স্ট্রিংয়ের শেষে কোটেশন না থাকা। |
সারসংক্ষেপ
TypeErrorতখন ঘটে যখন আপনি ফাংশন বা মেথডে ভুল টাইপের ডেটা পাস করেন। এটিStrict ModeবাType Hintingব্যবহারে ঘটে এবংTypeErrorত্রুটির মাধ্যমে রিপোর্ট করা হয়।ParseErrorতখন ঘটে যখন কোডের সিনট্যাক্স ভুল থাকে এবং PHP কোডটিকে পার্স (parse) করার সময় এটি শনাক্ত হয়। এটি সাধারণত কোডে ভুল লেখার কারণে ঘটে এবং রানটাইমে নয়, কোড পার্স করার সময় ঘটে।
এই দুটি ত্রুটি PHP 7-এর শক্তিশালী ত্রুটি শনাক্তকরণ ব্যবস্থার অংশ, যা ডেভেলপারদের সঠিক এবং নির্ভুল কোড লিখতে সহায়ক।
Read more