কম্পিউটার টিউটোরিয়াল

PHP লেট স্ট্যাটিক বাইন্ডিং


ভূমিকা

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

উদাহরণ

নিচের কোডে, প্যারেন্ট ক্লাস self:: প্রিফিক্স দিয়ে স্ট্যাটিক মেথড কল করে। চাইল্ড ক্লাসে একই মেথড কল করলে চাইল্ড ক্লাসের নাম রেফার করে না কারণ সেটি রেজলভ হয় না।

উদাহরণ

<?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

self:: এর বদলে static:: ব্যবহার করলে রানটাইমে লেট বাইন্ডিং তৈরি হয়।

উদাহরণ

<?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

নন-স্ট্যাটিক কনটেক্সটে static:: ব্যবহার

প্যারেন্টের প্রাইভেট মেথড চাইল্ডে কপি হয়, তাই এর স্কोप এখনও প্যারেন্ট ही থাকবে।

উদাহরণ

<?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. PHP-তে বর্তমান ফাংশন নাম পেতে

  2. PHP-তে final কীওয়ার্ড

  3. PHP-তে ইন্টারফেস (Interface) ব্যাখ্যা

  4. PHP-তে অ্যাবস্ট্রাক্ট ক্লাস (Abstract Class) ব্যাখ্যা