PHP Object Oriented Programming পর্ব-৭: Static Method, Properties and Late Static Binding

Static Method এবং Property কি ?

Late Static Binding নিয়ে আমরা একটু পরেই আলোচনা করব, তার আগে চলুন static কি? সেই বিষয়ে আলোচনা করা যাক।

Object ছাড়া সরাসরি class এর Method এবং Property গুলোকে access করার জন্য সেই method এবং property গুলোকে কে static ঘোষণা করতে হয়। আর static ঘোষণা করার জন্য Method এবং Property নামের পূর্বে static কীওয়ার্ড ব্যবহার করতে হবে। static keyword টি কে access modifier ও বলা যায়। চলুন একটা উদাহরণ দিয়ে দেখা যাক:

<?php
class testStatic{
  // static methods and properties are defined with the static keyword.
  //You can add static keyword before or after visibility (Public, Private, Protected)
  public static $count = 0;
  static public $counter=1; 
   
  public static function counter(){
       
      }
  static public function anotherCounter(){
       
      }
}
?>

Static Method এবং Property গুলো কিভাবে access বা ব্যবহার করব?

Static Method এবং Property গুলোর ব্যবহার দুইভাবে ভাগ করা যায়।
১. class এর বাহিরে ব্যবহার
২. class এর ভিতরে ব্যবহার

Static Method এবং Property গুলোর class এর বাহিরে ব্যবহার :

Static Method এবং Property গুলোকে class এর বাহির থেকে Object ছাড়া ব্যবহার করতে চাইলে প্রথমে class এর নামের সাথে (::) scope resolution operator দিতে হয় , তারপর static Method অথবা Property এর নাম লিখতে হয় । আরো ভালো ভাবে বুঝার জন্য নিম্নের উদাহরণটি দেখুন :

<?php
class testStatic{
     
  public static $count = 0;
 
   
  public static function counter(){
      echo "Its Static Counter";
  }
  
}
 
//Accessing Static Property and Method Outside of the Class
testStatic::$count=5; // Assigning Value to static Property
echo testStatic::$count; // Calling Static Property with Updated Value
echo "<br>";
testStatic::counter(); // Calling Static Method with Updated Value
?>

Note: scope resolution operator এর পর property নাম এর সাথে অবশ্যই $ (dollar sign) দিতে হবে।

Static Method এবং Property গুলোর class এর ভিতরে ব্যবহার :

Static Method এবং Property গুলোকে class এর ভিতরে $this pseudo-variable ছাড়া ব্যবহার করতে চাইলে প্রথমে class এর নাম অথবা self keyword এর সাথে (::) scope resolution operator দিতে হয় , তারপর static Method অথবা Property এর নাম দিতে হয় । আরো ভালো ভাবে বুঝার জন্য নিম্নের উদাহরণটি দেখুন :

<?php
class testStatic{
     
  public static $count = 0;
 
   
  public static function counter(){
      echo "Its Static Counter: ";
      echo self::$count++,"<br>"; // accessing static Property inside class
  }
  
}
// Calling Static Method Outside Class
testStatic::counter(); 
testStatic::counter();
testStatic::counter();
?>

Late Static Binding কি ?

PHP তে Static Method এবং Property গুলোকে class এর ভিতরে কল করার জন্য $this pseudo-variable এর পরিবর্তে class এর নাম অথবা “self” keyword এর সাথে (::) scope resolution operator দিয়ে ব্যবহার করা হয় , তখন যেই class এ “self” keyword ব্যবহার করা হয়েছে, “self” keyword শুধু ঐ ক্লাসকেই নির্দিষ্ট করে নেয়। আর তাতে Parent Class এর static Method এবং Property গুলোকে child class এ inherit হয়না। আর সেই জন্য PHP 5.3 থেকে Parent Class এর Static Method এবং Property গুলোকে কে child class এ inherit করার জন্য static Method এবং Property কল করার সময় “self” keyword এর পরিবর্তে “static” keyword ব্যবহার প্রয়োগ করা হয়েছে, আর এটাকেই PHP 5.3 থেকে Late Static Binding বলা হয়। আরো ভালো ভাবে বুঝার জন্য নিম্নের উদাহরণ দুটি দেখুন :

উদাহরণ: “self” keyword এর ব্যবহার

<?php
class Course{
    protected static $courseName = 'Professional PHP';
    public static function getCourseName(){
        return self::$courseName;
    }
}
  
class Student extends Course{
    protected static $courseName = 'Laravel';   
}
  
echo Student::getCourseName(); // Professional PHP, not Laravel

ব্যাখ্যা:

  • প্রথমত, আমরা Course নামক একটি Class তৈরী করি যার মধ্যে আছে $courseName নামে একটি static property যার Value হচ্ছে “PHP Professional” এবং getCourseName নামে একটি static Method তৈরী করি যা $courseName Property এর value return করবে। লক্ষ্য করবেন, যে আমরা Course Class এর ভিতরে static property তে access করার জন্য self এবং “::” scope resolution Operator ব্যবহার করেছি।
  • দ্বিতীয়ত , আমরা Student নামে Course class থেকে একটি child class তৈরী করি, এবং Student class এর মধ্যেও $courseName নামে একটি static property আছে যার value হচ্ছে “Laravel” .
  • তৃতীয়ত , আমরা আমাদের Student child class দিয়ে Course class থেকে getCourseName method কল করি। যাতে আমরা আমাদের Student Child Class এর course name হিসেবে “laravel” পাই। যাই হোক Course class এর getCourseName Method টি আমাদের কে ফলাফল হিসেবে “Laravel” এর পরিবর্তে “PHP Professional” রিটার্ন করে, এর কারণ হচ্ছে self keyword যেই class এ কল করা হয় সেই class ছাড়া child বা অন্য কোনো class কে নির্দিষ্ট করেনা।

উপরের সমস্যা কে সমাধান করার জন্য PHP 5.3 থেকে Late Static Binding সুবিধা যোগ করে। মূলত, self keyword এর পরিবর্তে static keyword টি ব্যবহার করা হয়েছে, যেন যেই class থেকে call করা হবে যেন সেই class কে নির্দিষ্ট করে। চলুন উপরে আমাদের উদাহরণ পরিবর্তন করা যাক:

উদাহরণ: “static” keyword বা Late Static Binding এর ব্যবহার

<?php
class Course{
    protected static $courseName = 'Professional PHP';
    public static function getCourseName(){
        return static::$courseName;
    }
}
  
class Student extends Course{
    protected static $courseName = 'Laravel';   
}
  
echo Student::getCourseName(); // Laravel

এখন আমরা আমাদের প্রত্যাশিত ফলাফল পাব।

Leave A Reply

Your email address will not be published. Required fields are marked *