PHP Variable Scope – Lifetime: कोई Variable किसी Script में कहां पर Create होता है और कहां तक वह Variable Script में Exist रहता है, इस बात को Variable का Scope कहते हैं और कोई Variable कहां Alive होगा और Script में कहां पर जाकर Destroy हो जाएगा, इस बात को Variable का Lifetime कहते हैं। PHP के Variables का Scope व Lifetime लगभग “C” Language के Variable के Scope व Lifetime के समान ही होता है।
यदि हम Function Create नहीं करते तो हम किसी Script में हम जिस किसी भी Type का Variable Create करते हैं, वह Variable पूरी Script में Available रहता है। लेकिन जब हम कोई Function Create करते हैं, तब स्थिति पूरी तरह से बदल जाती है।
PHP में जब हम किसी Variable को Declare करते हैं, तब वह Variable आगे बताए अनुसार चार में से किसी एक Scope में हो सकता है और चारों ही Scopes का अपना विशेष महत्व है।
Local Variables
जब हम किसी Variable को किसी Function में Declare करते हैं, तो इस Variable को Local Variable कहा जाता है। ये एक ऐसा Variable होता है, जो केवल Function की Body में ही Available रहता है। Function से बाहर इस Variable का कोई अस्तित्व नहीं होता।
Local Variable Function में जहां पर Declare किए जाते हैं, वहां से लेकर Function के Closing Curly Braces तक Available रहते हैं, लेकिन Closing Curly Braces पर PHP Parser Control के पहुंचते ही, Function में Declare किए गए सभी Variables Destroy हो जाते हैं। यानी Function के अन्दर Declare किए गए सभी Variables का Lifetime केवल Function का Closing Curly Brace तक ही होता है।
चूंकि, PHP में हम किसी Variable को कहीं भी Declare कर सकते हैं, इसलिए जब हम किसी Variable को Declare करने से पहले उसे उपयोग में ले लेते हैं, तो PHP “Undefined Variable” नाम का PHP Notice Trigger करता है। जैसेः
<?php echo $var; $var = 10; echo $var; ?>
जब हम इस Program को Interpret करते हैं, तो PHP हमें निम्नानुसार Error देता हैः
PHP Notice: Undefined variable: var in C:\wamp\www\phpInHindi\001.php on line 2 PHP Stack trace: PHP 1. {main}() C:\wamp\www\phpInHindi\001.php:0 Notice: Undefined variable: var in C:\wamp\www\phpInHindi\001.php on line 2 Call Stack: 0.0004 323688 1. {main}() C:\wamp\www\phpInHindi\001.php:0 10
हालांकि इस Script में हमने $var नाम का Variable Declare किया है, फिर भी PHP हमें Error दे रहा है। ऐसा इसलिए हो रहा है क्योंकि PHP में किसी भी Variable का Lifetime “C”, “C++” व “Java” की तरह वहां से शुरू होता है, जहां पर उस Variable को Declare किया जाता है।
इसलिए उपरोक्त Code की पहली Line में हमने $var को Declare करने से पहले ही Echo कर दिया है जबकि $var Variable का Lifetime उपरोक्त Program के Codes की दूसरी Line से शुरू होता है। परिणामस्वरूप PHP हमें उपरोक्तानुसार Error देता है।
हालांकि PHP में Function Level Local Scope व Script Level Global Scope होता है, लेकिन Block Level Scope नहीं होता, जैसाकि “C”, “C++” व “Java” में होता है। यानी यदि हम निम्नानुसार Code लिखें:
<?php $var = 10; { $var = 20; echo $var . "\n"; } echo $var; ?>
तो PHP $var नाम के दो अलग Variables Create नहीं करता जिनका Scope व Lifetime अलग-अलग हो, बल्कि ये दोनों ही Variables समान $var को Represent करते हैं। परिणामस्वरूप इस Program का Output हमें निम्नानुसार प्राप्त होता हैः
20 20
क्योंकि जब Program Control Curly Braces के Block में पहुंचता है, तो वह $var नाम का नया Variable Create नहीं करता, जैसा कि “C”, “C++” व “Java” में होता है, बल्कि PHP Script में Declare किए गए Global $var Variable के मान 10 को ही Change करके 20 कर देता है। परिणामस्वरूप हमें उपरोक्त Output प्राप्त होता है।
लेकिन इसी स्थान पर यदि हम निम्नानुसार एक Function Create कर दें, जिसमें समान नाम का Variable हो, तो हमारा Output एकदम अलग होता हैः
<?php $var = 10; function demo() { $var = 20; echo $var; } echo $var; demo(); ?> //Output 20 10
ऐसा इसलिए हो रहा है क्योंकि PHP में Function का Scope Script के Scope से अलग होता है। इसलिए Function व Script दोनों में समान नाम के दो अलग Variables हो सकते हैं।
हालांकि “C”, “C++”, “Java” जैसी Programming Languages में हम एक ही नाम के एक से ज्यादा Variables समान Scope में Declare नहीं कर सकते। लेकिन PHP में हम ऐसा कर सकते हैं और जब हम PHP में एक ही नाम के एक से ज्यादा Variables समान Scope में Create करते हैं, तब PHP Variable को केवल एक ही बार Declare करता है। बाकी सभी Statements में PHP उसी समान Variable को नई Value Assign करता है। जैसेः
<?php $var = 10; $var = 20; echo $var; ?>
इस Script में PHP $var नाम के दो अलग Variables Create नहीं करता, बल्कि उसी $var नाम के Variable का मान 10 से Change करके 20 कर देता है, जिसे Script के Code की पहली Line में Declare किया गया है।
Parameter Variables
PHP में जो Function Arguments Accept करते हैं, Arguments के रूप में Specify किए जाने वाले Variables भी केवल उस Function की Body में ही Available रहते हैं। यानी Parameter Variables भी Local Variables ही होते हैं।
Functions का अपना स्वयं का Variable Set होता है। यानी Function के Parameters व Body में Define किए गए विभिन्न Variables का अपना अलग Scope व Lifetime होता है, जो कि Script या अन्य Functions में Define किए गए Variables से पूरी तरह से अलग होता है।
Global Variables
किसी Function में Define किए गए Variables Function की Body से बाहर Available नहीं होते। इसी तरह से किसी Script में Define किए गए Variables Function की Body में Directly Available नहीं होते, हालांकि वे Variables Function के लिए Global Variables होते हैं, लेकिन फिर भी किसी Script में Define किए गए Variables तब तक Function की Body में Available नहीं होते, जब तक कि हम Function के अन्दर उन Variables को global Keyword के साथ Specify नहीं करते। जैसेः
<?php $dayName = "Holyday"; function days(){ echo $dayName; } days(); ?>
जब हम उपरोक्त Program को Run करते हैं, तो हालांकि इस PHP Script में $dayName नाम का Function Available है, लेकिन Function के Call होते समय PHP Parser हमें निम्नानुसार Undefined Variable का Notice Message देता हैः
PHP Notice: Undefined variable: dayName in C:\wamp\www\phpInHindi\001.php on line 4 PHP Stack trace: PHP 1. {main}() C:\wamp\www\phpInHindi\001.php:0 PHP 2. days() C:\wamp\www\phpInHindi\001.php:7 Notice: Undefined variable: dayName in C:\wamp\www\phpInHindi\001.php on line 4 Call Stack: 0.0006 324648 1. {main}() C:\wamp\www\phpInHindi\001.php:0 0.0007 324752 2. days() C:\wamp\www\phpInHindi\001.php:7
PHP ऐसा इसलिए करता है क्योंकि समान Script में Specify किए गए Variables को भी उसी Script में Specify किया गया Function भी Directly Access नहीं कर सकता।
यदि हम समान Script में Specify किए गए किसी Variable को उसी Script में Define किए गए किसी Function की Body के अन्दर Access करना चाहें, तो Function की Body में हमें उस Variable के नाम के साथ global Keyword को Specify करके PHP को ये बताना पडता है कि हम जिस Variable को Function की Body में Assess करना चाहते हैं, वह Variable Function की Body से बाहर अपनी Container Script में Define किया गया है।
इस प्रकार से यदि हम उपरोक्त Program को ही फिर से Modify करें, ताकि हमारा Function Script में Define किए गए Variable को Access कर सके, तो हमारा Program निम्नानुसार बनेगाः
<?php $dayName = "Holyday"; function days(){ global $dayName; echo $dayName; } days(); ?>
अब जब हम इस Program को Execute करते हैं, तो PHP हमें किसी तरह का Notice नहीं देता, बल्कि अब days() नाम का हमारा User Defined Function $dayName Variable को Access करके echo Statement द्वारा इस Variable में Stored Value को Screen पर Display कर देता है।
PHP में पहले से ही कुछ Global Variables Define किए गए हैं। इन Global Variables में से एक Global Variable का नाम $GLOBALS है। ये एक Associative Array होता है और इस Array Variables के हर Element के रूप में Current PHP Script के Global Scope में Define किए गए सभी Global Variables का Reference Stored होता है। यानी इस Array की हर Key, Current PHP Script में Define किए गए सभी Global Scope के Variables का नाम होता है।
इसलिए यदि हम चाहें तो Current PHP Script में Define किए गए सभी Variables को इस $GLOBALS Associative Array द्वारा भी Access कर सकते हैं। जैसेः
<?php $dayName = "Holyday"; function days(){ echo $GLOBALS['dayName']; } days(); ?>
इस Program का Output भी Exactly वही होता है, जो हमारे पिछले Program का Output था। लेकिन इस Program में हमने Function के अन्दर Script के Global Variable को Access करने के लिए global Keyword का प्रयोग नहीं किया है। क्योंकि $GLOBALS एक ऐसा Global Array होता है, जो पूरी Script व Script के हर Element जैसे कि Function के लिए भी समान रूप से Available रहता है।
जब हम किसी Function में किसी Variable को global Keyword के साथ Specify करते हैं, तो वास्तव में हम PHP के इसी $GLOBALS Array के किसी Variable का Reference Set कर रहे होते हैं। यानी हम चाहें तो +GLOBALS Variable को निम्नानुसार भी उपयोग में ले सकते हैं:
<?php $dayName = "Holyday"; function days(){ $var = &$GLOBALS['dayName']; echo $var; } days(); ?>
Static Variables
“C”, “C++” व “Java” की तरह ही PHP में भी Static Variables होते हैं और ये Variables PHP में भी समान प्रकार से काम करते हैं। Static Variables ऐसे Variables होते हैं, जो Function की Body से Control के बाहर निकल जाने के बाद जब Function Destroy हो जाता है, तब भी उस Scope के लिए Available रहते हैं, जिस Scope में इन्हें Declare किया गया होता है।
यानी यदि Static Variable को Script में Declare किया गया हो, तो वह Variable Script के अन्त तक Available रहता है जबकि यदि Static Variable को किसी Function में Declare किया गया हो, तो वह Variable Function के Destroy हो जाने के बाद भी उस Function के लिए Available रहता है और यदि उस Function को फिर से Call किया जाए, तो हम उस Static Variable की पिछली Value को Function के अन्दर फिर से Access कर सकते हैं।
Static Variables पूरे Program में केवल एक ही बार Create होते हैं, फिर भले ही उन्हें किसी Function के Local Scope यानी Parameters के रूप में अथवा की Body के अन्दर Declare किया गया हो या Script के Global Scope में तथा Script के पूरी तरह Execute हो जाने के बाद Destroy होते हैं।
किसी Variable को Static Variable बनाने के लिए हमें Variable Declare करते समय Variable के नाम से पहले STATIC Keyword का प्रयोग करना पडता है। चूंकि PHP में Keywords Case Sensitive नहीं होते, इसलिए हम Keywords को Capital, Small अथवा Proper किसी भी Case में लिख सकते हैं। इस Variable की Working को ठीक से समझने के लिए हम निम्नानुसार एक Program Create कर सकते हैं:
<?php function demo() { STATIC $var = 1; echo $var++ . "\n"; } for($i=0; $i<4; $i++){ demo(); } ?>
इस Program में हमने demo() uke dk ,d Function Create किया है और इस Function में $var नाम का एक Static Variable Create किया है। फिर इस Function को एक for Loop में चार बार Call किया है। परिणाम स्वरूप इस Program के Run होने पर हमें निम्नानुसार Output प्राप्त होता हैः
//Output 1 2 3 4
जैसाकि हम जानते हैं कि जब PHP Parser demo() नाम के Function में पहुंचता है, वहां $var घ्घ्घ् घ्घ् घ्घ् नाम का एक Variable Create करता है और उसमें Value के रूप में 1 Store कर देता है। फिर इस Variable के मान को Print करता है और Function से Exit करता है।
सामान्यतः Function के Execution के बाद जब Control Function के Closing Curly Braces एक ही बार से Exit करता है, तो Function में Create होने वाले सभी Variables Destroy हो जाते हैं। परिणामस्वरूप जब उसी Function को फिर से Call किया जाता है, तो Function के अन्दर Define किए गए सभी Variables फिर से Create होते हैं, इसलिए उनमें Stored मान भी फिर से Initialize होते हैं।
लेकिन जब हम उपरोक्त Program के अनुसार किसी Variable को Static Declare कर देते हैं, तो वह Variable ,d gh ckj Create होता है। इसलिए जब उपरोक्त Program में Define किए गए demo() नाम के Function को for Loop में अगली बार Call किया जाता है, तो $var नाम का Variable फिर से Create नहीं होता।
यदि हम उपरोक्त Program में Variable के साथ Static Keyword का प्रयोग नहीं करते, तो हमारा Program व उसका Output निम्नानुसार होताः
<?php function demo() { $var = 1; echo $var++ . "\n"; } for($i=0; $i<4; $i++){ demo(); } ?> //Output 1 1 1 1
ऐसा Output इसलिए प्राप्त होता, क्योंकि जितनी बार भी demo() नाम का Function for Loop में Call होता, हर बार PHP इस Function के $var नाम के Variable को Create करता और जितनी बार भी PHP Control इस demo() नाम के Function से Exit करता, $var Destroy हो जाता। परिणामस्वरूप हर बार $var Create होता और उसमें मान 1 Initialize हो जाता।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook PHP in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
PHP in Hindi | Page: 647 | Format: PDF