PHP Object Oriented Programming পর্ব-৩: Method Chaining

PHP তে Method Chaining কি?

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(“Masud Alam”)->setAge(33)->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("Masud Alam");
  $person->setAge("33");
  $person->getInfo();
?>

Result

Hello, My name id Masud Alam and my age is 33 years.

পাঠক লক্ষ্য করুন আমাদের person নামক class এর $name এবং $age property দুটিতে value set করার জন্য আমরা setName() এবং setAge() method দুটিকে আলাদা আলাদা ভাবে call করি . এবং সর্বশেষে $name এবং $age property দুটির value দেখানোর জন্য আলাদা ভাবে getInfo() নামক method কে call করি।

Zend Certified PHP Engineering (ZCPE) Course

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("Masud Alam")->setAge("33")->getInfo();
 ?>

Result

Hello, My name id Masud Alam and my age is 33 years.

ব্যাখ্যা : লক্ষ্য করুন আমরা setName() Method এবং setAge() Method দুটির মধ্যে $this pseudo-variable টি রিটার্ন করি। আর আমরা জানি “$this” pseudo-variable টি মূলত current class এর object কে ধারণ করে। প্রথমে আসা যাক $person->setName(‘Masud Alam’) এ . এটির কাজ হচ্ছে setName() Method কে call করবে এবং Name Property তে Masud Alam নামকে value হিসেবে সেট করবে। তারপর setName() মেথড $this রিটার্ন করবে , অর্থাৎ এটি Object person কে রিটার্ন করবে।

এরপরে আশা যাক ->setAge(’33’) তে , যেহেতু আমরা আগের setName() method থেকে chain object পেয়েছি , সুতরাং সেই person object দিয়েই আমরা setAge(33) কে call করা এবং age Property তে 33 age কে value হিসেবে সেট করবে। আবার এখানেও আমরা $this রিটার্ন করায়, একই ভাবে এখানেও মূলত আমাদের Object person কে chain রিটার্ন করবে।

সর্বশেষে ->getInfo() method দিয়ে আমরা পূর্বের ধারাবাহিকতায় chain রেজাল্ট পাই।

Zend Certified PHP Engineering (ZCPE) Course

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;

আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ১৫ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller, Amarbebsha Ltd সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ডেটা সাইন্স, মেশিন লার্নিং, বিগ ডেটা, ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। এছাড়াও বাংলাদেশের ১৮৫ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ১২০ এরও অধিক ছাত্র আমার হাতে জেন্ড সার্টিফাইড ইঞ্জিনিয়ার হয়েছেন। বর্তমানে w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -8.2 Engineering, Laravel Mastering Course with ReactJS, Python Beginning To Advance with Blockchain, Machine Learning and Data Science, Professional WordPress Plugin Development Beginning to Advance কোর্স করাই। আর অবসর সময়ে w3programmers.com এ ওয়েব টেকনোলজি নিয়ে লেখালেখি করি।

One thought on “PHP Object Oriented Programming পর্ব-৩: Method Chaining

  1. ছার static method chaining করার সময় যদি এর ভিতরে constructor and destructor use করি তাহলে যত গুলো method chaining করতেছি ততবার constructor and destructor call হচ্ছে এর কারন কি বুঝতে পারতেছি না ।

Leave a Reply