PHP তে Exception Handling part-3

আপনার মনে বরই সন্দেহ যে আসলে TRY CATCH কাজ করছে কিনা।

এই সমস্যারও সমাধান আছে। ব্যাপার টা আসলে TRY CATCH FINALLY. FINALLY যেইটা করে যে, আপনার এক্সেপ্সন হোক বা না হোক, সে TRY CATCH এর পরে কাজ করবেই।

4

5

FINALLY অনেক উপকারী, মনে করেন আপনি TRY এর ভেতর কোন একটা ফাইল ওপেন করলেন। কিন্তু কাজ শেষ হয়ে ফাইল টা পুনরায় বন্ধ হবার আগে আপনার কোড throw করে দিলো। ফাইল টা কিন্তু এখনও ওপেন করা। কিন্তু আপনি এখন যদি ফাইল টা বন্ধ করে দিতে পারেন। এখন এমন যদি হয় যে আপনার কোড অন্য কোন কন্ডিশন এর  কারণে throw করল সেটা কিন্তু ফাইল ঠিক এ TRY তে বন্ধ হইছে তখন কিন্তু আবার ওয়ার্নিং দিবে। কারণ যেই ফাইল টা আপনি বন্ধ করতে চাইতেছেন ঐটা ততক্ষণে TRY তে বন্ধ হয়ে আছে। এখন ভালো করতে যেয়ে আবার বিপদ এসে দাঁড়াবে। এখন আপনার মনে চাঁদ উঠতে পারে যে, আমরা তো TRY CATCH এর আগে পরেই ফাইল টা ওপেন আর ক্লোজ করতে পারতাম। কিন্তু মহাশয়, যদি না ব্যাবহার করেন তাহলে কেন ওপেন আর ক্লোজ করা? আর এইটা কনফার্ম ও হইলনা যে TRY CATCH কাজ করছে কিনা।

ফাইল টা যদি TRY তে file open করে finally তে close করি তাহলে ব্যাপার টা আমাদের পুরা control এ থাকবে। আমরা তখন নিশ্চিত থাকব যে TRY CATCH ঠিক মত কাজ করতেছে আর আমরা আমাদের ইচ্ছা মত আমাদের প্রয়োজন অনুযায়ী কন্ডিশন ব্যাবহার করতে পারবো

TRY CATCH implement করতে গেলে কিছু ব্যাপার খেয়াল রাখতে হবেঃ

  • TRY লিখলে অবশ্যই CATCH লিখতে হবে
  • FINALLY লিখতেও পারেন আবার নাও লিখতে পারেন।
  • TRY এর ভেতর THROW করতে হবে।
  • CATCH মূলত একটা OBJECT রিসিভ করে। তাই ব্যাবহারের ক্ষেত্রে এইটা খেয়াল রাখতে হবে

 

PHP তে Exception Handling part-2

কিভাবে এক্সেপ্সন হ্যান্ডলিং করতে হয়ঃ

পিএইচপি খুব সুন্দর করে এক্সেপ্সন হ্যান্ডলিং করে। যদিও অন্য সব প্রোগ্রামিং ল্যাঙ্গুয়েজ প্রায় একি ভাবে এক্সেপ্সন হ্যান্ডলিং করে থাকে।

TRY CATCH মেথড ব্যাবহার করে আমরা খুব সহজে এক্সেপ্সন হ্যান্ডলিং করতে পারি

 

code

মনে করেন আপনি একটা সংখ্যা কে আরেকটা সংখ্যা দিয়ে ভাগ করবেন এবং দুইটা সংখ্যাই ইউজার ইনপুট দিবে।

1

এখন স্বাভাবিক ভাবে যদি ইনপুট দেয় তাহলে আপনার কোড সুন্দর রান করবে কিন্তু ব্যাপারটা ঝামেলা পাকাবে তখন যখন কোন একটা সংখ্যা কে ০ দিয়ে ভাগ করেতে চাইবে। তখনি আপনাকে পিএইচপি একটা ওয়ানিং দিবে।

2

একটা ব্যাপার হয়তো খেয়াল করেছেন, ওয়ার্নিং দেয়া সত্ত্বেও কোড কিন্তু ঠিকই রান করছে। এখন এই ব্যাপার টা আমরা সমাধান করি। চলেন আমরা আমাদের কোড টা একটু পরিবর্তন করি। TRY CATCH এ TRY এর ভেতর সম্পূর্ণ কোড টা থাকবে

%e0%a7%82%e0%a7%80%e0%a6%ac

ট্রাই এর ভেতরে আমরা কন্ডিশন গুলা চেক করব। আর যদি কোন কোন  এক্সসেপ্সন পাই তাহলে ৯  নাম্বার লাইনের মত করে throw ব্যাবহার করতে হবে। Exception আসলে পিএইচপি এর একটি ক্লাস। THROW যেটা করে, Exception এর একটা object তৈরি করে। আর প্রথম প্যারামিটারে আমরা যেই Exception টা পাঠাতে চাই ঐটা লিখব। catch এর প্যারামিটারে আমরা যে object টা threw করেছিলাম ঐটা receive  করব। ব্যাস কাজ শেষ। এখন যদি আমরা আমাদের কোডটা রান করে দেখি

3

আপনি এবার আপনার প্রয়োজন মত ব্যবস্থা করতে পারবেন। আপনি ঐ এক্সেপ্সন  এর জন্য যা করতে চান।

PHP তে Exception Handling part -1

পিএইচপি  মূলত কম্পাইল করে যখন কোন কোড রান করা হয়। সি, সি++ এ আমরা যেমন আগে বিল্ড করে পরে রান করি পিএইচপি তা করেনা। যখন কোন কোড রান করানো হয় তখনি এটা বিল্ড হয় আর রান হয়। তাই সি, সি++ এ আমরা যেমন বিল্ড করার সময় এরর গুলা পেয়ে যাই পিএইচপি তে পাই যখন কোড তা রান করি তখন। তাই রান করার আগে এরর কি আছে বলা মুশকিল। এখন আলহামদুলিল্লাহ্‌ ধরে নিলাম আমাদের কোডে কোন এরর নাই। কিন্তু এমন কিছু ব্যাপার ঘটতে পারে যেটা আমরা হয়তো আগে ভাবিনাই। এটা কোন ফাইল, ফাংশন বা ক্লাস মিছিং এর ব্যাপার না, ঐটা হলে আপনি এরর নোটিশ পাইতেন।

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

 

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

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