পিএইচপি এসকিউএল ওয়ার্ডপ্রেস জাভাস্ক্রিপ্ট জেকুয়েরি এইচটিএমএল
ফোরাম
×

পিএইচপি টিউটোরিয়াল

হোম-HOME পরিচিতি-Introduction ইনস্টল-Install গঠনপ্রনালী-Syntax চলক-Variable পিএইচপি Echo / Print তথ্যের ধরণ-Data Types কনস্ট্যান্ট-Constant অপারেটর-Operator ফাংশন-Function সুপারগ্লোভাল-Superglobal

কন্ট্রোল স্টেটমেন্ট

if স্টেটমেন্ট if...Else স্টেটমেন্ট Switch স্টেটমেন্ট While লুপ DO...While লুপ For লুপ

পিএইচপি এ্যারে এবং স্ট্রিং

এ্যারে-Array এ্যারে সর্টিং -Array Sorting মাল্টি এ্যারে-Multi Array স্ট্রিং-String

পিএইচপি এডভান্স

তারিখ এবং সময় পিএইচপি include ফাইল হ্যান্ডলিং-File Handling ফাইল খোলা/পড়া ফাইল তৈরি/লিখা ফাইল আপলোড ফাইল ডাউনলোড কুকি-Cookie সেশন-Session ফিল্টার-Filter এডভান্স ফিল্টার-Advance Filter এঁরর হ্যান্ডলিং-Error Handling এক্সেপশন হ্যান্ডেলিং-Exception Handling

পিএইচপি ফরম

ফরম হ্যান্ডলিং ফরম ভ্যালিডেশন আবশ্যক ফরম ফিল্ড ফরম URL/E-mail সম্পূর্ণ ফরম

MySQL ডেটাবেজ

MySQL ডেটাবেজ MySQL ডেটাবেজ সংযোগ MySQL ডেটাবেজ তৈরী MySQL টেবিল তৈরী MySQL তথ্য ইনসার্ট MySQL শেষ আইডি পান MySQL একাধিক তথ্য ইনসার্ট MySQL প্রিপেয়ার্ড স্টেটমেন্ট MySQL তথ্য সিলেক্ট MySQL তথ্য ডিলিট MySQL তথ্য আপডেট MySQL সীমিত তথ্য সিলেক্ট

পিএইচপি- এক্সএমএল

PHP XML Parser PHP SimpleXML Parser PHP XML Parser PHP SimpleXML - Get PHP XML Expat PHP XML Dom

পিএইচপি - এজাক্স

পিএইচপি AJAX পরিচিতি AJAX পিএইচপি AJAX ডেটাবেজ AJAX এক্সএমএল AJAX সারাসরি সার্চ AJAX RSS রির্ডার AJAX Poll

পিএইচপি অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং(OOP)

OOP পরিচিতি OOP class তৈরী OOP objects তৈরী OOP $this কিওয়ার্ড OOP মেথড এবং প্রোপার্টি চেইনিং OOP অ্যাক্সেস মোডিফায়ার OOP ম্যাজিক মেথড এবং কন্সটেন্ট OOP ইনহেরিটেন্স OOP Abstract class এবং method OOP ইন্টারফেস OOP পলিমরফিজম OOP টাইপ হিন্টিং() OOP টাইপ হিন্টিনং ইন্টারফেস OOP স্ট্যাটিক মেথোড এবং প্রোপার্টি

 

পিএইচপি এক্সেপশন হ্যান্ডেলিং


প্রোগ্রামে কোনো নির্দিষ্ট error সংঘটিত হলে এক্সিকিউশন(execution)-র স্বাভাবিক ধারাকে পরিবর্তন করার জন্য এক্সেপশন(Exception) ব্যবহার করা হয়।


এক্সেপশন কি

কোড এক্সিকিউশনের সময় কোনো নির্দিষ্ট error বা ব্যতিক্রমধর্মী কন্ডিশনের সৃষ্টি হলে, কোড এক্সিকিউশন(execution)-র স্বাভাবিক ধারাকে পরিবর্তন করার জন্য এক্সেপশন(Exception) ব্যবহার করা হয়। এই কন্ডিশন(conditon)-কে এক্সেপশন বলা হয়।

পিএইচপি ৫ আসার পরে error নিয়ন্ত্রণে নতুন মাত্রা হিসাবে অবজেক্ট ওরিয়েন্টেড পদ্ধতি যোগ হয়েছে।


এক্সেপশনের উৎপত্তি হলে সাধারণত নিচের বিষয়সমূহ সংঘটিত হয়ঃ

এই অধ্যায়ে নিম্নোক্ত error হ্যান্ডেলিং মেথডসমূহ নিয়ে আলোচনা করবোঃ

বিঃদ্রঃ শুধুমাত্র error কন্ডিশন নিয়ে কাজ করার জন্য এক্সেপশন ব্যবহার করা উচিৎ। কোনো নির্দিষ্ট পয়েন্টে এক স্থান থেকে অন্য স্থানে লাফ দিয়ে যাওয়ার জন্য এটি ব্যবহার করা উচিৎ নয়।


এক্সেপশনের মৌলিক ব্যবহার

যখন কোনো এক্সেপশন নিক্ষিপ্ত হয় তখন এটিতে যে কোড থাকে তা সম্পাদিত(executed) হয় না, এক্ষেত্রে পিএইচপি এর সাথে মিলসম্পন্ন ক্যাচ( "catch") ব্লককে খুঁজে বের করার চেষ্টা করে।

যদি কোনো এক্সেপশন ধরতে না পারে তাহলে Uncaught Exception ম্যাসেজের মাধ্যমে মারাত্মক ভুল(fatal error) প্রেরণ করবে।

এক্সেপশনকে নিক্ষেপ করে না ধরলে কি হয় তা উদাহরণের মাধ্যমে দেখা যাক।

উদাহরণ
<?php
//এক্সেপশনসহ একটি ফাংশন তৈরি করুন
function checkNumber($num) {   if($num>1) {     throw new Exception("Value must be 1 or below");
  }   return true; } //এক্সেপশনকে ট্রিগার করুন checkNumber(2); ?>

ফলাফল
( ! ) Fatal error: Uncaught exception 'Exception' with message 'Value must be 1 or below'
( ! ) Exception: Value must be 1 or below

Try, throw এবং catch

আমরা যদি উপরের উদাহরণে error কে এড়িয়ে চলতে চাই তাহলে এক্সেপশন হ্যান্ডেল করার জন্য উপযুক্ত কোড লেখার প্রয়োজন হবে।

উওযুক্ত এক্সেপশন হ্যান্ডেলিং কোডে নিম্নোক্ত বিষয়সমূহ থাকেঃ

চলুন বৈধ্য কোড সম্বলিত এক্সেপশনকে ট্রিগার(trigger) করার চেষ্টা করিঃ

উদাহরণ
<?php
// এক্সেপশনের সহিত একটি ফাংশন তৈরি
function checkNumber($num) {
  if($num > 1) {
    throw new Exception("Value must be 1 or below");
  }
  return true;
}

// "try" ব্লকের মধ্যে এক্সেপশন নিক্ষিপ্ত হবে
try {
  checkNumber(2);
  // যদি এক্সেপশনটি নিক্ষিপ্ত হয়, তাহলে এই লিখাটি প্রদর্শিত হবে না
  echo "If you see this, the number is 1 or below";
}

// এক্সেপশনটি ক্যাচ করে
catch(Exception $obg) {
  echo 'Message: ' .$obg->getMessage();
}
?>

ফলাফল
Message: Value must be 1 or below

উপরের উদাহরণের ব্যাখ্যাঃ

উপরের কোড এক্সেপশন থ্রো করে এবং ধরেঃ

যাইহোক, প্রত্যেক throw এর জন্য একটি catch থাকে এটি টপ লেভেল হ্যান্ডেলার সেট করে error হ্যান্ডেল করার জন্য।


একটি কাস্টম এক্সেপশন ক্লাস তৈরি

একটি কাস্টম এক্সেপশন হ্যান্ডেলার তৈরি করতে আপনাকে অবশ্যই একটি ফাংশন নিয়ে বিশেষ ক্লাস তৈরি করতে হবে আর যখনই পিএইচপিতে এক্সেপশন ঘটবে তখনই ঐ ফাংশনটি ডাকা হবে। ক্লাসটি অবশ্যই এক্সেপশন ক্লাসের এক্সটেনশন(extension) হতে হবে।

কাস্টম এক্সেপশন ক্লাস পিএইচপি এক্সেপশন ক্লাস থেকে প্রোপার্টি সমুহ ইনহেরিট করতে পারে এবং আপনি এটিতে কাস্টম ফাংশন যোগ করতে পারেন।

চলুন একটি এক্সেপশন ক্লাস তৈরি করা যাকঃ

উদাহরণ
<?php
class customException extends Exception {
  public function errorMessage() {
    // ত্রুটি মেসেজ
    $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
    .': <b>'.$this->getMessage().'</b> is not a valid E-mail';
    return $errorMsg;
  }
}

$email = "someone@example...com";

try {
  // ই-মেইলটি সঠিক নাকি ভুল তা পরীক্ষা করছে
  if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
    // ই-মেইলটি যদি বৈদ না হয় সেক্ষেত্রে এক্সেপশনটি নিক্ষিপ্ত হবে
    throw new customException($email);
  }
}

catch (customException $obg) {
  // কাস্টম মেসেজটি প্রদর্শিত হবে
  echo $obg->errorMessage();
}
?>

নতুন ক্লাসটি পুরাতন এক্সেপশন ক্লাসের অনুলিপি এর সাথে নতুন করে errorMessage() ফাংশনটি যুক্ত হয়েছে। যেহেতু নতুন ক্লাসটি পুরাতন ক্লাসের অনুলিপি এবং এটি পুরাতন ক্লাসেরই মেথোড এবং প্রোপার্টি সমুহ ইনহেরিট করছে, সুতরাং আমরা এক্সেপশন ক্লাসের মেথোড সমূহ এইভাবে ব্যবহার করতে পারিঃ- getLine(), getFile() এবং getMessage()

উপরের উদাহরণের ব্যাখ্যাঃ

উপরের কোডটি একটি এক্সেপশন throws করছে এবং কাস্টম এক্সেপশন ক্লাস catches করছেঃ


একাধিক এক্সেপশন(exceptions)

একাধিক শর্ত পরীক্ষা করার জন্য স্ক্রিপ্টে একাধিক এক্সেপশন ব্যবহার করা সম্ভব।

কয়েকটি if..else ব্লক, একটি switch অথবা নেস্ট একাধিক এক্সেপশন ব্যবহার করা সম্ভব। এই সকল এক্সেপশন গুলো বিভিন্ন এক্সেপশন ক্লাস ব্যবহার করতে পারে এবং বিভিন্ন ত্রুটি মেসেজ রিটার্ন করেঃ

উদাহরণ
<?php
class customException extends Exception {
 public function errorMessage() {
   // ত্রুটি মেসেজ
   $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
   .': <b>'.$this->getMessage().'</b> is not a valid E-mail';
   return $errorMsg;
 }
}

$email = "someone@example.com";

try {
  // ই-মেইলটি সঠিক নাকি ভুল তা পরীক্ষা করছে
  if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
    // ই-মেইলটি যদি বৈদ না হয় সেক্ষেত্রে এক্সেপশনটি নিক্ষিপ্ত হবে
    throw new customException($email);
  }
  // ই-মেইলের ঠিকানায় "example" লিখাটি বিদ্যমান কিনা তা পরীক্ষা করছে
  if(strpos($email, "example") !== FALSE) {
    throw new Exception("$email is an example e-mail");
  }
}

catch (customException $obg) {
  echo $obg->errorMessage();
}

catch(Exception $obg) {
  echo $obg->getMessage();
}
?>

উপরের উদাহরণের ব্যাখ্যাঃ

উপরের কোডটি দুইটি শর্ত পরীক্ষা করে এবং যদি একটিও শর্ত সত্যি না হয় সেক্ষেত্রে একটি এক্সেপশন throws করেঃ

যদি এক্সেপশনটি customException ক্লাসের মাধ্যমে নিক্ষেপ করা হতো এবং সেখানে ক্যাচ করার মত কোনো customException থাকতো না, সেক্ষেত্রে শুধুমাত্র বেস এক্সেপশনটি ক্যাচ করতো এবং এই এক্সেপশোনটি সেখানে হ্যান্ডেল করা হতো।


পুনরায় নিক্ষিপ্ত এক্সেপশন

কখনও কখনও, যখন একটি এক্সেপশন নিক্ষিপ্ত হয়, তখন আপনি ইচ্ছা করলে এর চিরাচরিত উপায় ব্যাতিত ভিন্ন উপায়ে এটিকে হ্যান্ডেল করতে পারেন। একটি "catch" ব্লকের মধ্যে একটি এক্সেপশনকে দ্বিতীয়বার নিক্ষেপ করা সম্ভব।

একটি স্ক্রিপ্ট সিস্টেমের ত্রুটি গুলো ব্যবহারকারীর কাছ থেকে লুকিয়ে ফেলে। একজন কোডারের জন্য সিস্টেমের ত্রুটি গুলো অনেক গুরুত্বপুর্ণ হতে পারে, কিন্তু একজন ব্যবহারকারীর কাছে সিস্টেমের ত্রুটি গুলো বিরক্তিকর মনে হতে পারে। সুতরাং, ব্যবহারকারীর জন্য জিনিসগুলো আরো সহজতর করার জন্য এক্সেপশন গুলোকে পুনরায় দ্বিতীয়বার ব্যবহারকারীর উপযুক্ত মেসেজ সহকারে নিক্ষেপ করা হয়ঃ

উদাহরণ
<?php
class customException extends Exception {
  public function errorMessage() {
    // ত্রুটি মেসেজ
    $errorMsg = $this->getMessage()." is not a valid E-mail.";
    return $errorMsg;
  }
}

$email = "someone@example.com";

try {
  try {
    // ই-মেইলের ঠিকানায় "example" লিখাটি বিদ্যমান কিনা তা পরীক্ষা করছে
    if(strpos($email, "example") !== FALSE) {
      // ই-মেইলটি যদি বৈদ না হয় সেক্ষেত্রে এক্সেপশনটি নিক্ষিপ্ত হবে
      throw new Exception($email);
    }
  }
  catch(Exception $obg) {
    // পুনরায় নিক্ষিপ্ত এক্সেপশন
    throw new customException($email);
  }
}

catch (customException $obg) {
  // কাস্টম মেসেজটি প্রদর্শিত হবে
  echo $obg->errorMessage();
}
?>

উপরের উদাহরণের ব্যাখ্যাঃ

উপরের কোডে ই-মেইলের ঠিকানা পরীক্ষা করা হয় এবং যদি ই-মেইলের ঠিকানার মধ্যে "example" লিখাটি উল্লেখ থাকে, সেক্ষেত্রে এক্সেপশনটি আবার পুনরায় নিক্ষেপ করা হয়ঃ

যদি এক্সেপশনটি তার বর্তমান "try" ব্লকে কোনো "catch" খুঁজে না পায়, সেক্ষেত্রে এটি বর্তমান "try" ব্লকে উপরের স্তরে "catch" ব্লক খুঁজে।


উপরের স্তরের এক্সেপশন হ্যান্ডেলার সেট করুন

set_exception_handler() ফাংশনটি ব্যবহারকারী কর্তৃক ডিফাইনকৃত ফাংশন যা, যে সকল এক্সেপশন গুলো ক্যাচ করা হয়না তাদের হ্যান্ডেল করেঃ

উদাহরণ
<?php
function ownException($obgxception) {
 echo "<b>Exception:</b> " . $obgxception->getMessage();
}

set_exception_handler('ownException');

throw new Exception('Non Catchable Exception occurred');
?>

ফলাফল
Message: Non Catchable Exception occurred

উপরের কোডটিতে কোনো "catch" ব্লক নেই। এর পরিবর্তে উপরের স্তরে ফাংশনটি কাজ করা চালু করে, যা ক্যাচ না হওয়া এক্সেপশন গুলো হ্যান্ডেল করে।


এক্সেপশনের জন্য নিয়মাবলী

একটি সাধারন নিয়মঃ যদি আপনি কিছু নিক্ষেপ করেন, আপনাকে তা ধরতেই হবে।