PHP তে Method Chaining কি?
PHP তে যখন অনেক গুলো method কে একটি single instruction এর মধ্যে call করা হয়, PHP এর পরিভাষায় একে বলা হয় Method Chaining . আরেকটু সহজ ভাবে বুঝিয়ে বলি, ধরুন আপনার Person নামে একটা class আছে, যেখানে আপনার $name এবং $age নামে দুটি private property আছে। আর $name এবং $age property দুটিতে value set করার জন্য আছে যথাক্রমে setName() এবং setAge() নামক দুটি method. এবং সর্বশেষে $name এবং $age property দুটির value দেখানোর জন্য আছে getInfo() নামক method. এবং ধরুন আমাদের object টির নাম হচ্ছে $person. এখন আমরা যদি এই তিনটি method কে আলাদা আলাদা ভাবে object দিয়ে call না করে একটি single instruction এর মধ্যে ঠিক এইভাবে call করতে চাই : $person->setName(“Sahab Uddin”)->setAge(25)->getInfo(). PHP এর পরিভাষায় এই পদ্ধতিকে বলা হয় Method Chaining . Method Chaining এ class এর মধ্যের প্রত্যেকটি Method অর্থাৎ যেই class এর method সেই class এর object কে return করে। Method Chaining এর জন্য class এর মধ্যে যেকোনো value return এর পরিবর্তে return $this; কথাটি লিখতে হয়। চলুন পুরো ব্যাপারটা কয়েকটি উদাহরণের মাধ্যমে বুঝা যাক।
উদাহরণ ১: সাধারণ একটা class এবং তার রেজাল্ট
<?php
class person
{
private $name="";
private $age="";
public function setName($name="")
{
$this->name=$name;
}
public function setAge($age="20")
{
$this->age=$age;
}
public function getInfo()
{
echo "Hello, My name is ".$this->name." and my age is ".$this->age." years.";
}
}
$person = new person();
$person->setName("Sahab Uddin");
$person->setAge("25");
$person->getInfo();
?>
Result
Hello, My name is Sahab uddin and my age is 25 years.
পাঠক লক্ষ্য করুন আমাদের person নামক class এর $name এবং $age property দুটিতে value set করার জন্য আমরা setName() এবং setAge() method দুটিকে আলাদা আলাদা ভাবে call করি . এবং সর্বশেষে $name এবং $age property দুটির value দেখানোর জন্য আলাদা ভাবে getInfo() নামক method কে call করি।
Method Chaining এর ব্যবহার :
উপরের class টিকে Method Chaining এ convert করতে হলে আপনাকে setName() Method এবং setAge() Method এর শেষে return $this; লাইনটি যুক্ত করে দিতে হবে। নিচের উদাহরণটি দেখুন :
<?php
class person
{
private $name="";
private $age="";
public function setName($name="")
{
$this->name=$name;
return $this;
}
public function setAge($age="20")
{
$this->age=$age;
return $this;
}
public function getInfo()
{
echo "Hello, My name is ".$this->name." and my age is ".$this->age." years.";
}
}
$person = new person();
$person->setName("Sahab Uddin")->setAge("25")->getInfo();
?>
Result
Hello, My name is Sahab Uddin and my age is 25 years.
ব্যাখ্যা : লক্ষ্য করুন আমরা setName() Method এবং setAge() Method দুটির মধ্যে $this pseudo-variable টি রিটার্ন করি। আর আমরা জানি “$this” pseudo-variable টি মূলত current class এর object কে ধারণ করে। প্রথমে আসা যাক $person->setName(‘Sahab Uddin’) এ . এটির কাজ হচ্ছে setName() Method কে call করবে এবং Name Property তে Sahab Uddin নামকে value হিসেবে সেট করবে। তারপর setName() মেথড $this রিটার্ন করবে , অর্থাৎ এটি Object person কে রিটার্ন করবে।
এরপরে আশা যাক ->setAge(’25’) তে , যেহেতু আমরা আগের setName() method থেকে chain object পেয়েছি , সুতরাং সেই person object দিয়েই আমরা setAge(25) কে call করা এবং age Property তে 25 age কে value হিসেবে সেট করবে। আবার এখানেও আমরা $this রিটার্ন করায়, একই ভাবে এখানেও মূলত আমাদের Object person কে chain রিটার্ন করবে।
সর্বশেষে ->getInfo() method দিয়ে আমরা পূর্বের ধারাবাহিকতায় chain রেজাল্ট পাই।
Static Method Chaining
Static Method Chaining সাধারণ Method Chaining এর মতোই। তবে এখানে প্রত্যেকটি static Method এর মধ্যে return $this এর পরিবর্তে return new static; কথাটা লিখতে হবে। নিচের উদাহরণ দেখুন :
<?php
class oop{
public static $val;
public static function init($var){
static::$val=$var;
return new static;
}
public static function add($var){
static::$val+=$var;
return new static;
}
public static function sub($var){
static::$val-=$var;
return new static;
}
public static function out(){
return static::$val;
}
}
echo oop::init(10)->add(2)->sub(5)->out(); //Result: 10+2-5=7
echo "<br>";
echo oop::sub(2)->out(); //Result: 7-2=5;