payment by upi: sinhamit@icici or payment by bank account name: amit kumar sinha, account number: 2646728782 IFSC code: KKBK0005660 SWIFT: KKBKINBB

Please support if you like my work by payment through upi: sinhamit@icici or payment by bank

account name: Amit Kumar Sinha,
account number: 2646728782
IFSC code: KKBK0005660
SWIFT: KKBKINBB


Parameters, Arguments, & Scope   in Category: पीएचपीलेवल2   by amit

🕙 Posted on 2023-06-15 at 14:22:21


फ़ंक्शंस में पैरामीटर्स और तर्क (arguments)

    आइए एक फ़ंक्शन के सिंटैक्स का विस्तृत विश्लेषण करें। आपने पिछले पृष्ठ में देखा है कि जब कस्टम फ़ंक्शन के अंदर return कीवर्ड के बिना एक्सप्रेशन और स्टेटमेंट लिखे जाते हैं, तो उन्हें गतिशील रूप से उपयोग नहीं किया जा सकता है। इसी तरह, पैरामीटर और तर्क विशेषताएँ (features) हैं, जो कस्टम फ़ंक्शंस को अधिक लचीला बनाती हैं।

    किसी कस्टम फ़ंक्शन को परिभाषित करते समय, functionName के ठीक बाद () कोष्ठकों के अंदर रखे गए वेरिएबल नामों को पैरामीटर कहा जाता है। इन पैरामीटर्स में डिफ़ॉल्ट मान हो सकता है या फ़ंक्शन से बाहर डेटा (मान) ले सकता है।

    functionName() (इसे परिभाषित करने के बाद या पहले) डेटा (या मान) के साथ लागू किया जाना चाहिए, जो पैरामीटर्स की संख्या के समान होना चाहिए, (जब उन पैरामीटर के लिए डिफ़ॉल्ट मान प्रदान नहीं किए जाते हैं)। संबंधित डेटा (या मान) को तर्क (arguments) कहा जाता है। आप पहले से ही विभिन्न पूर्व-निर्धारित फ़ंक्शंस का उपयोग कर चुके हैं जिनमें उस फ़ंक्शन के ठीक बाद () कोष्ठकों के भीतर तर्क पारित किए जाते हैं।

    निम्नलिखित उदाहरण में, function­Name में पास किए गए तर्क (इसे लागू करने / कॉल करने के समय) चर (variables) के रूप में हैं। इन चर नामों (संबंधित तर्कों के लिए) को पहले से ही परिभाषित किया जाना चाहिए और कुछ मान निर्दिष्ट किए हैं, अन्यथा ERROR दिखाया जाएगा। आप function­Name के संबंधित पैरामीटर के लिए सीधे शाब्दिक मानों को तर्क के रूप में रख सकते हैं।

<?php
  function functionName( $param1, $param2 ) {
    // कस्टम फ़ंक्शन के अंदर स्टेटमेंट
    return !$param1 + !$param2;     // वापसी मान एक अभिव्यक्ति या शाब्दिक (जैसे NULL), आदि हो सकता है।
  }
  $arg1 = false; $arg2 = NULL;
  var_dump( functionName( $arg1, $arg2 ) );
?>

    function­Name() फ़ंक्शन के बाहर घोषित एक चर नाम फ़ंक्शन के अंदर स्वचालित रूप से एक्सेस नहीं किया जाएगा। इसी तरह, फ़ंक्शन के अंदर घोषित चर नाम को बाहर से एक्सेस नहीं किया जा सकता है। पैरामीटर्स और तर्क function­Name() के बाहर से डेटा (या मान) फ़ंक्शन के अंदर डालने का तरीका हैं। इस तरह, आपका कस्टम फ़ंक्शन अधिक लचीला (flexible) होगा।

    जब आप उपरोक्त उदाहरण की पंक्ति 6 ​​पर टिप्पणी करते हैं, अर्थात, // $arg1 = false; $arg2 = NULL; आपको निम्न ERROR मिलेगा। हालाँकि, अपरिभाषित चर का मूल्यांकन NULL के रूप में किया जाता है, और इस प्रकार आउटपुट int(2) होता है।


Warning: Undefined variable $arg1 in C:\xampp\htdocs\php_project\phptest.php on line 7

Warning: Undefined variable $arg2 in C:\xampp\htdocs\php_project\phptest.php on line 7
int(2)

    जब आप अपने कस्टम फ़ंक्शन में आवश्यक किसी भी पैरामीटर के लिए तर्क के रूप में कोई मान (यहां तक ​​​​कि NULL या अपरिभाषित चर नाम) प्रदान नहीं करते हैं, तो दूसरे प्रकार की त्रुटि दिखाई जाती है। निम्न ERROR आपको यह भी बताएगा कि कितने तर्क अपेक्षित हैं, और आपने कितने तर्क पास किए (डाले) हैं। त्रुटियों को ध्यान से पढ़ने से आपको अपनी स्क्रिप्ट में हुई गलती को समझने और उसका विश्लेषण करने में मदद मिलेगी, और फिर आप समस्या का समाधान कर सकते हैं।


Fatal error: Uncaught ArgumentCountError: Too few arguments to function functionName(), 1 passed in C:\xampp\htdocs\php_project\phptest.php on line 7 and exactly 2 expected in C:\xampp\htdocs\php_project\phptest.php:2 Stack trace: #0 C:\xampp\htdocs\php_project\phptest.php(7): functionName(NULL) #1 {main} thrown in C:\xampp\htdocs\php_project\phptest.php on line 2

    निम्नलिखित दो उदाहरणों में, आप पहला कोड सरल switch स्टेटमेंट के साथ देख सकते हैं, और दूसरा उदाहरण बिल्कुल समान है, लेकिन एक कस्टम फ़ंक्शन में है। function­Name() के अंदर परिभाषित वेरिएबल्स (और स्थिरांक) उस फ़ंक्शन के लिए स्थानीय (local) है, और बाहरी वैश्विक दुनिया के लिए सुलभ नहीं है! पहले उदाहरण में आप यह भी देख सकते हैं $zodiac एक फ़ाइल, या एक अनुरोध-प्रतिक्रिया चक्र (जब अन्य फ़ाइलें एक-दूसरे से परस्पर जुड़ी हों) में हर जगह से पहुँचा जा सकता है।

<?php
  $year = 2023;
  $zodiac = [ 'Rat', 'Ox', 'Tiger', 'Rabbit', 'Dragon', 'Snake', 'Horse', 'Goat', 'Monkey', 'Rooster', 'Dog', 'Pig' ];
  switch( ($year - 4) % 12 ) {
    case 0: $sign = $zodiac[0];   break;
    case 1: $sign = $zodiac[1];   break;
    case 2: $sign = $zodiac[2];   break;
    case 3: $sign = $zodiac[3];   break;
    case 4: $sign = $zodiac[4];   break;
    case 5: $sign = $zodiac[5];   break;
    case 6: $sign = $zodiac[6];   break;
    case 7: $sign = $zodiac[7];   break;
    case 8: $sign = $zodiac[8];   break;
    case 9: $sign = $zodiac[9];   break;
    case 10: $sign = $zodiac[10];   break;
    case 11: $sign = $zodiac[11];   break;
  }
  echo "{$year} is the year of the {$sign}."; // आउटपुट निम्न दिखाया गया है:
?>

2023 is the year of the Rabbit.

    निम्नलिखित उदाहरण में, return कीवर्ड का उपयोग किया गया है जो PHP interpreter को कस्टम फ़ंक्शन से तुरंत बाहर कर देता है। इसलिए break कीवर्ड की आवश्यकता नहीं है। आप यह भी देख सकते हैं कि फ़ंक्शन के अंदर से उपरोक्त चर नाम, $zodiac तक सीधे नहीं पहुँचा जा सकता। इसलिए, आपको एक ही मान को अन्य चर नाम में फिर से घोषित करना होगा। इससे कोई फर्क नहीं पड़ता कि चर नाम क्या है। एक स्थानीय (local) चर नाम का वही चर नाम हो सकता है जो कस्टम फ़ंक्शन के बाहर है। लेकिन, दोनों चर नामों के लिए मेमोरी लोकेशन अलग-अलग हैं। दोनों चर नाम एक दूसरे से असंबंधित (संबंधित नहीं) हैं।

<?php
  function chinese_zodiac( $year ) {
    $zodiac = [ 'Rat', 'Ox', 'Tiger', 'Rabbit', 'Dragon', 'Snake', 'Horse', 'Goat', 'Monkey', 'Rooster', 'Dog', 'Pig' ]; // local variable
    switch( ($year - 4) % 12 ) {
      case 0: return $zodiac[0];
      case 1: return $zodiac[1];
      case 2: return $zodiac[2];
      case 3: return $zodiac[3];
      case 4: return $zodiac[4];
      case 5: return $zodiac[5];
      case 6: return $zodiac[6];
      case 7: return $zodiac[7];
      case 8: return $zodiac[8];
      case 9: return $zodiac[9];
      case 10: return $zodiac[10];
      case 11: return $zodiac[11];
    } // end of switch statement
  } // end of function
  $year = 2022; $sign = chinese_zodiac( $year );
  echo "{$year} is the year of the {$sign}.<br />";
  echo "2027 is the year of the " . chinese_zodiac( 2027 ) . "."; // आउटपुट निम्न दिखाया गया है:
?>

2022 is the year of the Tiger.
2027 is the year of the Goat.

दायरा (Scope): स्थानीय (local) और वैश्विक (global) वेरिएबल्स

    आपने पिछले पृष्ठ में देखा है कि फ़ंक्शंस प्रकृति में वैश्विक (global) हैं। यहां, हम चरों (variables) के दायरे (scope) के बारे में चर्चा करेंगे। आपने यहां ऊपर पढ़ा है कि किसी भी कस्टम फ़ंक्शन के बाहर घोषित वेरिएबल्स को एक फ़ाइल या एक अनुरोध-प्रतिक्रिया चक्र में कहीं से भी एक्सेस किया जा सकता है, लेकिन सीधे कस्टम फ़ंक्शन के अंदर नहीं। साथ ही, कस्टम फ़ंक्शन के अंदर घोषित सभी वेरिएबल्स उस फ़ंक्शन के बाहर से एक्सेस नहीं किए जा सकते हैं। आइए निम्नलिखित उदाहरणों में इनकी जांच करें।

<?php
  $girl = "outside"; // global scope
  function faa() {
    $girl = "inside"; // local scope
  }
  echo "1: " . $girl; // आउटपुट 1: outside है
  faa(); // फ़ंक्शन faa() को कॉल करना
  echo "<br />2: " . $girl; // आउटपुट 2: outside है - लेकिन faa() के अंदर का चर नहीं
?>

    उपरोक्त उदाहरण में और नीचे दिए गए पहले उदाहरण में, दोनों चर (फ़ंक्शननाम के बाहर और अंदर) के समान नाम हैं, लेकिन वे असंबंधित हैं। फ़ंक्शन-कॉल, फ़ंक्शन के अंदर घोषित चर को स्पर्श नहीं करता है। उपरोक्त उदाहरण के समान निम्नलिखित उदाहरण में, कस्टम फ़ंक्शन fee() में पैरामीटर प्रदान नहीं किया गया है। इसलिए if(){} कथन कुछ भी आउटपुट नहीं करता है, क्योंकि fee() के अंदर $boy = 'inside'; घोषणा से पहले if( isset() ){} को रखा गया है और चर $boy उस समय तक सेट (defined) नहीं है।

<?php
  $boy = "outside"; // global scope
  function fee() {
    if( isset( $boy ) ) {
      echo 'variable $boy is accessed in fee() function: ' . $boy;
    }
      $boy = "inside"; // local scope
  }
  echo "1: " . $boy; // आउटपुट 1: outside है
  echo '<br />';   fee(); // फ़ंक्शन fee() को कॉल करना
  echo "<br />2: " . $boy; // आउटपुट 2: outside है - लेकिन fee() के अंदर का चर नहीं
?>

    निम्न उदाहरण में, फ़ंक्शन foo() को कॉल (लागू) करते समय एक तर्क पारित किया जाता है, और यह तर्क कस्टम फ़ंक्शन के अंदर बाहरी चर को एक्सेस करने योग्य बनाता है। हालाँकि, इस फ़ंक्शन के अंदर भी घोषित चर नाम, फ़ंक्शन को कॉल करते समय स्पर्श नहीं किया जाता है। जाहिर है, आप में से कुछ अंदर के वैरिएबल डिक्लेरेशन को if( isset() ){} कथन के ऊपर रखने की कोशिश कर सकते हैं, और यह निश्चित रूप से मूल्य बदल देगा!

<?php
  $man = "outside"; // global scope
  function foo( $man ) {
    if( isset( $man ) ) {
      echo 'variable $man is accessed in foo() function: ' . $man;
    }
      $man = "inside"; // local scope
  }
  echo "1: " . $man; // आउटपुट 1: outside है
  echo '<br />';   foo( $man ); // आउटपुट variable $man is accessed in foo() function: outside है
  echo "<br />2: " . $man; // आउटपुट 2: outside है - लेकिन foo() के अंदर का चर नहीं
?>

    उपरोक्त उदाहरणों का वर्णन आपको यह समझाने के लिए किया गया है कि कस्टम फ़ंक्शन के बाहर परिभाषित वेरिएबल नाम केवल पैरामीटर्स के माध्यम से ही एक्सेस किए जा सकते हैं। और ये पैरामीटर्स (और एक कस्टम फ़ंक्शन के अंदर स्थानीय चर local variables) भी फ़ंक्शन के बाहर घोषित चर से संबंधित नहीं हैं। हालाँकि, कस्टम फ़ंक्शन ब्लॉक {} कर्ली ब्रेसिज़ के अंदर global (आरक्षित) कीवर्ड का उपयोग करते हुए, बाहर घोषित चर, फ़ंक्शन ब्लॉक के अंदर घोषित चर से जुड़ जाएगें।

<?php
  $bird = "outside"; // global scope
  function fuu() {
    global $bird; /* वैश्विक (global) चर को आयात करते समय पैरामीटर और तर्कों (arguments) की आवश्यकता नहीं होती है */
    if( isset( $bird ) ) {
      echo '<br />variable $bird is accessed in fuu() function: ' . $bird;
    }
    $bird = "inside"; // local scope
    echo '<br />variable $bird is changed in fuu() function: ' . $bird;
  }
  echo "1: " . $bird; // आउटपुट 1: outside है
  fuu();       /* जैसे ही कस्टम फ़ंक्शन लागू किया जाता है, बाहर घोषित हुआ चर (variable) अंदर घोषित चर से जुड़ जाता है और इसे बदला जा सकता है (OUTPUT नीचे दिए गए परिणाम के रूप में है) */
  echo "<br />2: " . $bird; // आउटपुट 2: inside है
?>

1: outside
variable $bird is accessed in fuu() function: outside
variable $bird is changed in fuu() function: inside
2: inside

    कुछ सुपर-ग्लोबल (पूर्व-परिभाषित) वेरिएबल्स हैं, उदाहरण के लिए, $_GET, $_POST, $_SERVER, $_SESSION, $GLOBALS, $_REQUEST। ये सुपर-ग्लोबल वेरिएबल्स साहचर्य सरणी (associative array) डेटा-प्रकार के हैं। ये सुपर-ग्लोबल वेरिएबल्स, एक कस्टम फ़ंक्शन के अंदर भी पहुंच रखने योग्य हैं और आपको उनके लिए global (आरक्षित) कीवर्ड की आवश्यकता नहीं है।


Leave a Comment: