কম্পিউটার

পিএইচপি লেট স্ট্যাটিক বাইন্ডিং


পরিচয়

PHP-তে দেরী স্ট্যাটিক বাইন্ডিংয়ের এই বৈশিষ্ট্যটি স্ট্যাটিক ইনহেরিটেন্সে রেফার কল করা ক্লাস ব্যবহার করা হয়। যখন স্ট্যাটিক পদ্ধতি বলা হয়, ক্লাসের নাম স্কোপ রেজোলিউশন অপারেটর (::) এর সাথে সংযুক্ত করা হয় যখন অন্যান্য উদাহরণ পদ্ধতির ক্ষেত্রে আমরা অবজেক্টের নাম ব্যবহার করে কল করি। স্ট্যাটিক::যে পদ্ধতিতে সংজ্ঞায়িত করা হয়েছে সেটি ব্যবহার করে সমাধান করা হবে না, পরিবর্তে রানটাইম তথ্য ব্যবহার করে গণনা করা হবে। বর্তমান ক্লাসের স্ট্যাটিক রেফারেন্সগুলি যে ক্লাসে ফাংশনটির অন্তর্গত তা ব্যবহার করে সমাধান করা হয়, যেখানে এটি সংজ্ঞায়িত করা হয়েছিল সেখানে নয়

উদাহরণ

নিম্নলিখিত কোডে, প্যারেন্ট ক্লাস স্ব::উপসর্গ সহ স্ট্যাটিক ইথোডকে কল করে। একই পদ্ধতি যখন চাইল্ড ক্লাসের সাথে ডাকা হয় তখন চাইল্ড ক্লাসের নাম উল্লেখ করে না কারণ এটি সমাধান করা হয়নি

উদাহরণ

<?php
class test1{
   public static $name="Raja";
   public static function name(){
      echo "name of class :" . __CLASS__;
   }
   public static function getname(){
      self::name();
   }
}
class test2 extends test1{
   public static function name(){
      echo "name of class :" . __CLASS__;
   }
}
test2::getname();
?>

আউটপুট

ফলাফল দেখায় যে প্রত্যাশার বিপরীতে, অভিভাবক শ্রেণীর নাম ফেরত দেওয়া হয়েছে

name of class :test1

static::এর পরিবর্তে self::ব্যবহার করা রানটাইমে দেরী বাঁধাই তৈরি করে

উদাহরণ

<?php
class test1{
   public static function name(){
      echo "name of class :" . __CLASS__;
   }
   public static function getname(){
      static::name();
   }
}
class test2 extends test1{
   public static function name(){
      echo "name of class :" . __CLASS__;
   }
}
test2::getname();
?>

উপরের কোডটি এখন প্রত্যাশা অনুযায়ী চাইল্ড ক্লাসের নাম প্রদান করে

আউটপুট

name of class :test2

স্ট্যাটিক::নন-স্ট্যাটিক প্রসঙ্গে

ব্যবহার করা

পিতামাতার ব্যক্তিগত পদ্ধতি সন্তানের কাছে অনুলিপি করা হয়, তাই এর সুযোগ এখনও পিতামাতার হবে

উদাহরণ

<?php
class test1{
   private function name(){
      echo "name of class :" . __CLASS__ ."\n";
   }
   public function getname(){
      $this->name();
      static::name();
   }
}
class test2 extends test1{
   //
}
$t2=new test2();
$t2->getname();
?>

আউটপুট

আউটপুট নিম্নলিখিত ফলাফল দেখায়

name of class :test1
name of class :test1

যাইহোক, যখন মূল পদ্ধতি ওভাররাইড করা হয়, তখন এর সুযোগ পরিবর্তিত হয়

উদাহরণ

class test3 extends test1{
   private function name() {
      /* original method is replaced; the scope of name is test3 */
   }
}
$t3 = new test3();
$t3->name();

আউটপুট

আউটপুট নিম্নলিখিত ব্যতিক্রম দেখায়

PHP Fatal error: Uncaught Error: Call to private method test3::name() from context ''

  1. কিভাবে পিএইচপি বর্তমান ফাংশন নাম পেতে?

  2. পিএইচপি-তে চূড়ান্ত কীওয়ার্ড

  3. PHP-এ ইন্টারফেস ব্যাখ্যা কর।

  4. পিএইচপি-তে বিমূর্ত শ্রেণী ব্যাখ্যা কর।