ম্যাজিক মেথড এবং কনস্ট্যান্ট
অবজেক্ট অরিয়েন্টেড পিএইচপিতে ম্যাজিক মেথড(method) এবং কনস্ট্যান্ট(constant) ব্যবহার করে খুব সামান্য কোড লিখেই অনেক বেশী কার্য সম্পাদন করা সম্ভব এবং এটি কোডের কার্যক্ষমতা এবং স্বচ্ছতার মাত্রাও অনেক বাড়িয়ে দেয়।
ম্যাজিক মেথড এর ব্যবহার সম্পর্কে অনেক বিতর্ক রয়েছে, তাই আমাদের এই টিউটোরিয়ালে আমরা অধিক সম্মত অংশগুলো নিয়ে আলোচনা করবো।
__construct() ম্যাজিক মেথড
ম্যাজিক মেথডগুলো সবসময় দুটি আন্ডারস্কোর দিয়ে শুরু হয়। এমনকি __construct() ম্যাজিক মেথডের ক্ষেত্রেও এই একই নিয়ম প্রযোজ্য।
আমরা কোন ক্লাসের অবজেক্ট তৈরির সময় __construct() ম্যাজিক মেথড ব্যবহার করে স্বয়ংক্রিয়ভাবে কিছু কার্য সম্পাদন করতে পারি। আমারা সাধারনত ক্লাসের প্রোপার্টির মান সেট করার জন্য __construct() ম্যাজিক মেথডটি ব্যবহার করি।
নিম্নের উদাহরণে আমরা __construct()
মেথড ব্যবহার করে ক্লাসের প্রোপার্টির মান সেট করবোঃ
<?php
class Greeting{
private $name;
public function __construct($name){
$this->name = $name;
}
}
?>
কন্সট্রাকটর মেথড ব্যবহার করলে অবজেক্ট তৈরির সময় ক্লাস এর মধ্য দিয়ে কমপক্ষে একটি বা প্রয়োজন অনুযায়ী আর্গুমেন্ট পাস করাতে হবে। কিন্তু আমরা যদি কন্সট্রাকটর মেথডকে কোনো গুরুত্ব না দিয়েই নতুন অবজেক্ট তৈরির চেষ্টা করি তাহলে একটি error এর সম্মূখীন হতে হবেঃ
$greeting = new Greeting();
Warning: Missing argument 1 for Greeting::__construct()
এই ধরনের error সমুহকে এড়িয়ে যাওয়ার জন্য আমরা কন্সট্রাকটর মেথডে একটি মান নির্ধারন করে দিতে পারি। অবজেক্ট তৈরি করার সময় কন্সট্রাকটর মেথডে মান সেট করার জন্য আমরা নিম্নের ন্যায় প্রথম বন্ধনির মধ্যে মান ঠিক করে দিবঃ
$greeting = new Greeting("Tamjid");
এখন আমরা একটি মেথড তৈরি করবো যার মাধ্যমে আমরা $name প্রোপার্টির ভ্যালু আউটপুট নিবঃ
<?php
class Greeting{
private $name;
public function __construct($name){
$this->name = $name;
}
public function getHello(){
echo "Hello ". $this->name . ".";
}
}
$greeting = new Greeting();
$greeting->getHello();
?>
Hello Tamjid.
কোনো ঝুঁকি ছাড়াই কিভাবে কন্সট্রাকটর মেথড লিখবেন?
উপরের উদাহরণে আমরা দেখেছি কন্সট্রাকটর মেথড ব্যবহার করে ক্লাসের অবজেক্ট তৈরি করার সময় ক্লাসের মধ্য দিয়ে আর্গুমেন্ট অতিক্রম করাতে হয়, অন্যথায় একটি error এর সম্মুখীন হতে হবে।
এই error টিকে এড়ানোর জন্য আমরা প্রোপার্টিতে একটি ডিফল্ট মান নির্ধারন করে দিব। প্রোপার্টির জন্য ডিফল্ট মানগুলো ফাঁকা স্ট্রিং অথবা স্ট্রিং অথবা শূন্য অথবা নাল ভ্যালু হতে পারে।
আমাদের প্রোগ্রামে আমরা ডিফল্ট ভ্যালু হিসাবে "Guest" ব্যবহার করবো। নিম্নের উদাহরণটি লক্ষ্য করুনঃ
<?php
class Greeting{
private $name = "Guest";
public function __construct($name = null){
if($name){
$this->name = $name;
}
}
public function getHello(){
echo "Hello ". $this->name . ".";
}
}
$greeting = new Greeting();
$greeting->getHello();
?>
আমরা $name প্রোপার্টিতে কোন মান পাস করানো ছাড়া একটি অবজেক্ট তৈরি করা সত্ত্বেও কোনো error দেখাবে না। কারন কন্সট্রাকটর মেথডের ডিফল্ট মান "NULL"।
Hello Guest.
চলুন দেখি উপরের উদাহরণে একটি মান পাস করলে কি ঘটেঃ
<?php
class Greeting{
private $name = "Guest";
public function __construct($name = null){
if($name){
$this->name = $name;
}
}
public function getHello(){
echo "Hello ". $this->name . ".";
}
}
$greeting = new Greeting("Tamjid");
$greeting->getHello();
?>
Hello Tamjid.
এক্ষেত্রে আমাদের দেওয়া মানটি আউটপুট হিসাবে দেখিয়েছে। সুতরাং উপরোক্ত পদ্ধতি অবলম্বন করে আমরা ম্যাজিক কন্সট্রাকটর ব্যবহার করতে পারি।
ম্যাজিক কনস্ট্যান্ট(constant)
ম্যাজিক মেথড ছাড়াও পিএইচপিতে আরো কিছু মজার কনস্ট্যান্ট রয়েছে। যেগুলো ব্যবহার করে আমরা নির্দিষ্ট কার্য সম্পাদন করতে পারি।
উদাহরণস্বরূপঃ আমরা একটি কনস্ট্যান্ট __CLASS__ ব্যবহার করতে পারি। পিএইচপিতে কনস্ট্যান্ট প্রকাশ এর জন্য প্রথমে দুইটি আন্ডারস্কোর, এরপরে কন্সট্যান্ট এর সবগুলো অক্ষর বড়-হাতের তারপরে আবার দুইটি আন্ডারস্কোর লিখতে হয়। __CLASS__ কনস্ট্যান্ট যে ক্লাসে ব্যবহার করা হয় এটি ঐ ক্লাসের নাম রিটার্ন করে।
<?php
class Greeting{
private $name = "Guest";
public function __construct($name = null){
if($name){
$this->name = $name;
}
}
public function getHello(){
echo "Class name: ".__CLASS__.".<br> Hello ". $this->name . ".";
}
}
$greeting = new Greeting("Tamjid");
$greeting->getHello();
?>
Class name: Greeting.
Hello Tamjid.
এছাড়া আরো কিছু ম্যাজিক কনস্ট্যান্ট রয়েছে যা আমরা ব্যবহার করতে পারিঃ
- __LINE__: লাইনের নাম্বার/অবস্থান আউটপুট দেয়।
- __FILE__: ফাইলে নাম এবং পাথ আউটপুট দেয়।
- __METHOD__: মেথডের নাম আউটপুট দেয়।