PHP instanceof | PHP Late Static Binding

PHP instanceof - PHP Late Static Binding - Hindi

PHP instanceof | PHP Late Static Binding – सामान्यतः जब हम Class Create करते हैं, तो हमें Current Class व Parent Class को त्ममित करने की जरूरत पडती है। Current Class को Refer करने के लिए हम self:: Expression का प्रयोग करते हैं जबकि Parent Class को Refer करने के लिए हम parent:: Expression का प्रयोग करते हैं।

PHP हमें selfparent Keywords इसलिए Provide करता है, ताकि हमारे Codes किसी भी नाम से किसी भी तरह से Bind न हों, ताकि हम हमारी जरूरत के अनुसार किसी भी Class के नाम को बदल सकें।

यदि हम हमारे Codes में Classes को self या parent के स्थान पर उनके Actual नाम से Refer करें, तो फिर हमारा Code पूरी तरह से उस Class के साथ Bind हो जाता है।

परिणामस्वरूप यदि हम Class के नाम को Change करें, तो फिर हमें उस Class में Specify किए गए सारे Codes को Check करना पडता है और जहां-जहां भी हमने Class का नाम Specify किया है, उन सभी स्थानों पर हमें Class के नाम को Manually Change करना पडता है।

लेकिन जब हम self या parent Keywords को Use करते हैं, तब बात ऐसी नहीं रह जाती है। Current Class को self व Parent Class को parent Keyword से Specify करने पर हम जब चाहें तब अपनी Class का नाम अपनी जरूरत के अनुसार Change कर सकते हैं और हमें उन Classes के Codes को देखने की जरूरत भी नहीं रहती।

selfparent Keywords अपना काम Normal तरीके से करते हैं, इसलिए हमें इनके बारे में ज्यादा सोंचने की जरूरत नहीं होती है। self Keyword Method में स्वयं की Class को Refer करता है, जबकि parent Keyword Current Class की Parent Class को Refer करता है।

लेकिन जब हम Static Members के बारे में बात करते हैं तो हमें इसे थोडा Detail से समझने की जरूरत पडती है। चूंकि किसी Class में Define किए गए Static Members Class Level होते हैं, इसलिए जब हम किसी ऐसी Class को Derive करते हैं, जिसमें पहले से कोई Static Method हो, तो Derived Class के लिए इस Static Method को Call करने पर Base Class का Static Method, Base Class को ही Refer करता है।

जबकि कई बार जरूरत ऐसी होती है कि हमें ये तय करते हुए किसी Code को Execute करना होता है कि हम किस Class Context यानी Class Scope में हैं। यदि हम Base Class के Scope में हों, तो Base Class के Context में Static Method Execute होना चाहिए, जबकि यदि हम Derived Class के Context में हों, तो Derived Class के Context में Static Method Execute होना चाहिए। इसे समझने के लिए हम एक उदाहरण देखते हैं।

आगे दिया गया उदाहरण इस बात को Clear कर रहा है कि किस तरह से सामान्यतः Static Binding Perform होती है और PHP हमेंशा Base Class के Context को ही Refer करता है। फिर अगले Program में हम इस Static Binding को Late Static Binding में Convert करेंगे।

Static Binding हमेंशा तब Perform होती है, जब हम किसी Class के किसी Method में किसी Static Method को self Keyword द्वारा Refer करते हैं, क्योंकि self हमेंशा उस Class को Refer करता है, जिसमें Method को Define किया गया है और उस Class को कभी Refer नहीं करता, जिसमें वह Inheritance के कारण Derive होने की वजह से उपलब्ध होता है।

जब हम किसी Class में self:: Expression या __CLASS__ Constant का प्रयोग करते हैं, तो ये Expression या Constant, Invoked Method जिस Class में होता है, उस Class के नाम को Represent करता है। जैसेः

<?php
	class Time {
	    public static function who() {
	        echo __CLASS__;
	    }
	    public static function test() {
	        self::who();
	    }
	}
	
	class NewTime extends Time {
	    public static function who() {
	        echo __CLASS__;
	    }
	}
	
	NewTime::test();
?>

इस Program में हमने Time Class में who() नाम का एक Static Method Create किया है और NewTime Class में Time Class को Inherit करते हुए NewTime Class में भी हमने who() नाम का एक Method Create किया है, जो कि Time Class के who() Method को Override करता है। साथ ही हमने Time Class में test() नाम का एक Method Create किया है, जो कि स्वयं की Class के ही who() नाम के Static Method को Invoke करता है।

जब ये Program Run होता है, तब निम्न Statement Execute होता है और NewTime Class के लिए test() Method को Call किया जाता हैः

NewTime::test();

चूंकि हमने NewTime Class में Time Class को Derive किया है और Base Class का test() Method public Scope में होने की वजह से Derived Class NewTime में भी Available है। परिणामस्वरूप उपरोक्त Statement के Execute होने पर Derived Class यानी NewTime Class के लिए Time Class का test() Method Invoke होना चाहिए।

क्योंकि test() Method को NewTime Class के लिए Call किया गया है, इसलिए test() Method द्वारा NewTime Class के ही who() Method को Invoke किया जाना चाहिए। लेकिन ऐसा नहीं होता और हमें इस Program का Output निम्नानुसार प्राप्त होता है, और उपरोक्त Statement Base Class के who() Method को ही Call कर रहा है, जिससे Base Class का नाम ही Return हो रहा हैः

//Output
Time

Static Method के इस Behavior को Static Binding कहा जाता है।

चूंकि Static Binding से हमारी जरूरत पूरी नहीं हो रही है क्योंकि हम चाहते हैं कि हमने जिस Class के साथ Static Method को Call किया है, उसी Class का नाम Return हो, तो इस जरूरत को पूरा करने के लिए PHP हमें static keyword प्रदान करता है।

पिछले Program में Specify किए गए self Keyword के स्थान पर इस Keyword को Use करके हम PHP से Late Static Binding की सुविधा प्राप्त कर सकते हैं। यानी यदि हम उपरोक्त Program में ही self के स्थान पर निम्नानुसार static Keyword का प्रयोग कर लें, तो हमें प्राप्त होने वाला Result बदल जाएगाः

<?php
	class Time {
	    public static function who() {
	        echo __CLASS__;
	    }
	    public static function test() {
	        static::who();
	    }
	}
	
	class NewTime extends Time {
	    public static function who() {
	        echo __CLASS__;
	    }
	}
	
	NewTime::test();
?>

//Output
   NewTime

जैसाकि उपरोक्त Program के Output में हम देख सकते हैं कि अब NewTime::test() Statement Base Class का नहीं बल्कि उस Class का नाम Return कर रहा है, जिसके साथ हमने test() Method को Call किया है।

ऐसा इसलिए होता है क्योंकि Late Static Binding के अन्तर्गत static:: Expression का प्रयोग किया जाता है और इसका प्रयोग जिस Method में किया जाता है, वह Method जिस Class में होता है, उस Class के संदर्भ में Static Member को Access नहीं करता, बल्कि Run Time में तय करता है कि किस Class के लिए Static Method को Use किया गया है।

यदि Base Class के लिए Static Method को Use किया गया हो तो ये static Keyword Method Base Class के Scope को Refer करता है जबकि Derived Class के लिए Static Method को Use करने पर ये Keyword Derived Class के Scope को Refer करता है।

this Keyword हमेंशा Object Level के यानी Same Scope के Private Data व Methods को Access करता है, जबकि static:: का प्रयोग अलग तरह का Result Generate करता है, जैसाकि हम पिछले प्रोग्रामों द्वारा समझ सकते हैं। जबकि static Keyword की एक और विशेषता ये है कि static:: हमेंशा किसी Class की Static Properties को ही Refer कर सकता है।

यदि हमें Object की किसी Property यानी Object Level के Data Member को Access करना हो, तो हमें this को ही Use करना होगा, जबकि static Members को Access करने के लिए हमें static:: को ही Use करना होगा, क्योंकि Static Members हमेंशा Class Level होते हैं।

सरल शब्दों में कहें तो parent:: या self:: हमेंशा Calling Information में Forward होता है। यानी इनका प्रयोग करने पर PHP Control Inheritance की Hierarchy में Child Class से Base Class की तरफ Forward होता है, जबकि static:: का प्रयोग करने पर ये Forwarding नहीं होती और Static Method को जिस Class में Specify किया जाता है, static:: उसी Class तक सीमित रहता है। परिणामस्वरूप हमेंशा उस Class को Refer करता है, जिसके लिए Static Method को Invoke किया गया है।

PHP instanceof Keyword

इस Keyword का प्रयोग करके हम इस बात का पता लगा सकते हैं कि कोई Object किसी Class, Sub-Class या Implemented Interface का Instance है या नहीं। उदाहरण के लिए यदि हम उपरोक्त Program में ये जानना चाहें Object $cpu Box Class का ही Instance है या नहीं, तो हम इस बात को जानने के लिए निम्नानुसार एक if Statement Create कर सकते हैं:

if($cpu instanceof Box)
{
	echo “Object ‘cpu’ is an Instance of Class Box”;
}

इस Keyword को उपयोग में लेते समय मूल रूप से दो बातें ध्यान में रखनी होती हैं। पहली ये कि Class के नाम को Quoted के बीच नहीं लिखना होता। यदि हम Class के नाम को Quotes के बीच लिखते हैं, तो PHP Error Trigger करता है और दूसरा ये कि यदि Comparision Fail हो जाता है, तो Script का Execution Abort हो जाता है।

instanceof Keyword उस स्थिति में काफी उपयोगी साबित होता है, जब हम हमारे Program में बहुत सारे Objects के साथ एक साथ प्रक्रिया कर रहे होते हैं।

PHP in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook PHP in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

PHP in Hindi | Page: 647 | Format: PDF

BUY NOW GET DEMO REVIEWS