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


Defining Functions   in Category: पीएचपीलेवल2   by amit

🕙 Posted on 2023-06-11 at 23:05:33


कस्टम फ़ंक्शंस

    अब तक, आपने पिछले पृष्ठों में PHP डेवलपर्स द्वारा प्रदान किए गए चर (variable) नामों और स्थिर (constant) नामों को परिभाषित करने, विभिन्न डेटा-प्रकारों, टाइप-कास्टिंग, ऑपरेटरों, आरक्षित कीवर्ड्स, नियंत्रण संरचनाओं और अंतर्निहित built-in (पूर्व-परिभाषित) फ़ंक्शंस के बारे में सीखा है। ये पूर्व-निर्धारित (pre-defined) फ़ंक्शंस constructs (उदाहरण के लिए, echo, print), अंतर्निहित फ़ंक्शंस (उदाहरण के लिए, var_dump(), print_r(), array(), unset(), गणित फ़ंक्शंस, स्ट्रिंग फ़ंक्शंस , सरणी फ़ंक्शंस , वेरिएबल हैंडलिंग फ़ंक्शंस/चर-संचालन फ़ंक्शंस), आदि हैं।

फ़ंक्शंस कोड के ब्लॉक होते हैं, जिनका विशिष्ट कार्य करने के लिए उपयोग किया जाता है।

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

कस्टम फ़ंक्शंस का नामकरण

    चर नाम और स्थिर नाम के विपरीत, फ़ंक्शन नाम केस-असंवेदनशील होते हैं। एक फ़ंक्शन नाम function (आरक्षित) कीवर्ड की सहायता से परिभाषित किया जाता है। एक फ़ंक्शन का नाम हमेशा एक अंग्रेजी (रोमन) वर्णानुक्रमिक अक्षर (A-Z a-z) या अंडरस्कोर से शुरू होना चाहिए, उसके बाद किसी भी अक्षर, संख्या या अंडरस्कोर के साथ।

    फ़ंक्शन नाम में कोई विशेष वर्ण नहीं होना चाहिए, जिसमें - (ऋण चिह्न) शामिल है। एक फ़ंक्शन नाम के बाद () प्रारम्भ और समापन कोष्ठक होना चाहिए, और उसके बाद एक या अधिक कथन {} प्रारम्भ और समापन घुंघराले ब्रेसिज़ के अंदर रखे जा सकते हैं। कोई भी मान्य PHP कोड किसी फ़ंक्शन के अंदर दिखाई दे सकता है, यहां तक ​​कि अन्य फ़ंक्शंस और class परिभाषाएँ भी।

<?php   // कस्टम फ़ंक्शन लिखने के लिए सिंटैक्स
  function my_function() {
    echo 'Hello<br />';
  }

  my_function();   // फ़ंक्शन को पहली बार कॉल करना
  my_function();   // फ़ंक्शन को दूसरी बार कॉल करना
  my_function();   // फ़ंक्शन को तीसरी बार कॉल करना
  my_function();   // फ़ंक्शन को चौथी बार कॉल करना
?>

Hello
Hello
Hello
Hello

    एक फ़ंक्शन कठोर (rigid जैसा कि ऊपर उदाहरण में वर्णित है) या लचीला (flexible) हो सकता है। आम तौर पर, एक कस्टम फ़ंक्शन को ऊपर दिखाए गए उदाहरण के अनुसार परिभाषित नहीं किया जाता है। उपरोक्त कोड केवल कस्टम फ़ंक्शन के सरलतम उदाहरण का वर्णन करने के लिए है। यह कि ऊपर परिभाषित फ़ंक्शन नाम my_function() गतिशील रूप से उपयोग नहीं किया जा सकता है। हालांकि निम्नलिखित कोड से आउटपुट के रूप में ERROR को प्रदर्शित नहीं होते है, लेकिन ये दोनों सही सिंटैक्स नहीं हैं।

<?php echo my_function(); // echo echo 'Hello<br />'; के समान ?>

<?php print my_function(); // print echo 'Hello<br />'; के समान ?>

    एक फ़ंक्शन लचीला (flexible) होगा जब ऐसे फ़ंक्शन-नाम से आउटपुट, डेटा के रूप में उपयोग किया जा सकता है (प्राप्त डेटा पर कुछ ऑपरेशन किया जा सकता है)। एक फ़ंक्शन-नाम हमेशा एक मान लौटाता है। उपरोक्त उदाहरण में, {} कर्ली ब्रेसिज़ के अंदर कोड के निष्पादन के बाद, my_function() फ़ंक्शन NULL को वापस करेगा।

<?php var_dump( my_function() ); // आउटपुट इस प्रकार है: ?>

Hello
NULL

<?php
  function myFunction() {
    // इस फ़ंक्शन के अंदर कोई कोड नहीं है, यह भी NULL को आउटपुट करेगा
  }
  var_dump( myFunction() ); // outputs NULL
?>

return कीवर्ड

    return (आरक्षित) कीवर्ड का उपयोग कस्टम फ़ंक्शन से आउटपुट के रूप में डेटा (मान) प्राप्त करने के लिए किया जाता है। एक ब्लॉक {} कर्ली ब्रेसिज़ के अंदर का return कीवर्ड आगे के कोड की प्रोसेसिंग को रोकता है, और उस फ़ंक्शन से लौटाए गए मान (शाब्दिक या चर/स्थिर से) को आउटपुट करता है। यदि {} कर्ली ब्रेसिज़ के बाहर return कीवर्ड का उपयोग किया जाता है, अर्थात किसी भी PHP फ़ाइल में, तो उसके नीचे दिए गए कोड निष्पादित नहीं होंगे।

<?php
  echo 'Hello<br />'; // आउटपुट Hello है
  return; // निम्नलिखित कोड के प्रसंस्करण (processing) को रोकता है
  echo 'Welcome<br />'; // कुछ भी आउटपुट नहीं होगा
?>

    Caution: आपको अन्य उदाहरणों से परिणाम प्राप्त करने के लिए, अपनी PHP फ़ाइल, (उदाहरण के लिए phptest.php) से कोड की उपरोक्त पंक्तियों को हटाना होगा।

<?php   // एक कस्टम फ़ंक्शन के अंदर return कीवर्ड का उपयोग करना
  function new_function() {
    return 'Hello';
  }
  var_dump( new_function() );
?>

string(5) "Hello"

    जैसा कि आप उपरोक्त उदाहरण में देख सकते हैं कि new_function() फ़ंक्शन से लौटाया गया मान स्ट्रिंग डेटा-प्रकार का है। अब आप उपरोक्त उदाहरण से अपनी आवश्यकता के अनुसार विभिन्न स्थानों पर गतिशील रूप से आउटपुट (डेटा) का उपयोग कर सकते हैं।

<?php
  echo gettype( new_function() ); // आउटपुट string है
  echo '<br />';
  $my_var = new_function();
  echo strlen( $my_var ); // आउटपुट 5 है
?>

    PHP फ़ंक्शन ओवरलोडिंग का समर्थन नहीं करती है, और ही पूर्व-घोषित फ़ंक्शंस को अपरिभाषित (undefine) या पुनर्परिभाषित (redefine) करना संभव है। एक अनुरोध-प्रतिक्रिया चक्र में, केवल एक फ़ंक्शन-नाम परिभाषित किया जाना चाहिए। जैसा कि फ़ंक्शन का नाम केस-असंवेदनशील है, आपको एक अनुरोध-प्रतिक्रिया चक्र में घोषित विभिन्न फ़ंक्शंस के लिए अलग-अलग नामों का उपयोग करना चाहिए।

फ़ंक्शंस प्रकृति में वैश्विक (global) हैं

    एक फ़ंक्शन-नाम को परिभाषित करने से पहले (शीर्ष पर) कॉल किया जा सकता है (यानी, उस फ़ंक्शन नाम को कॉल करने के नीचे, बाद में परिभाषित किया जा सकता है)। PHP में सभी फ़ंक्शंस और क्लासेज (classes) का global दायरा (scope) है - उन्हें फ़ंक्शन के बाहर बुलाया जा सकता है, भले ही उन्हें अंदर परिभाषित किया गया हो या/और इसके विपरीत (vice versa)। आप बाद के पृष्ठों में global और local कार्यक्षेत्र (दायरा/scope) के बारे में जानेंगे। निम्न उदाहरण देखें:

<?php
  var_dump( foo() ); // एक फ़ंक्शन का नाम वैश्विक है, इसलिए, दो स्थितियों को छोड़कर कहीं भी कॉल किया जा सकता है।
  function foo() {
    return 'Hello';
  }
?>

string(5) "Hello"

एक अपरिभाषित फ़ंक्शन को कॉल करने से त्रुटि (ERROR) होगी।

    आप सभी फ़ंक्शंस को कहीं से भी कॉल कर सकते हैं, सिवाय दो मामलों में (1. सशर्त conditional फ़ंक्शन, और 2. चर varible फ़ंक्शन)। हालाँकि, आपको ध्यान देना चाहिए कि जब किसी फ़ंक्शन का नाम परिभाषित नहीं होता है, तो ERROR को OUTPUT के रूप में दिखाया जाएगा।

<?php
  var_dump( not_defined_function() ); // आउटपुट ERROR जैसा कि नीचे दिखाया गया है:
?>


Fatal error: Uncaught Error: Call to undefined function not_defined_function() in C:\xampp\htdocs\php_project\phptest.php:1 Stack trace: #0 {main} thrown in C:\xampp\htdocs\php_project\phptest.php on line 1

    ऐसे कुछ मामले हैं जिनमें आपको सावधान रहना चाहिए, क्योंकि PHP interpreter फ़ाइल में कोड को ऊपर से नीचे, लाइन-बाय-लाइन (line-by-line) संसाधित करता है। जब आप किसी कोड-संपादक (जैसे कि VSCode Editor) में कोड लिखते हैं, तो पंक्ति 1 पहले संसाधित की जाएगी, फिर पंक्ति 2, पंक्ति 3, और इसी तरह...

    यद्यपि आप किसी अन्य कस्टम फ़ंक्शन के अंदर एक कस्टम फ़ंक्शन लिख सकते हैं, यह उचित नहीं है, और आपको ऐसी परिस्थितियों से यथासंभव बचना चाहिए। निम्न उदाहरण देखें:

<?php
  function coo() {
    echo 'Hello from Outside coo()<br />';
    function doo() {
      echo 'Hello from doo()<br />';
      function coo() {
        // इस आंतरिक फ़ंक्शन के अंदर कोड को संसाधित नहीं किया जा सकता है।
        echo 'Hello from Inside coo()<br />';
      }
    }
  }
  // doo(); // जब आप इस लाइन को अनकमेंट करते हैं, आउटपुट ERROR है जैसा कि नीचे दिखाया गया है
  coo(); // आउटपुट Hello from Outside coo() है
?>


Fatal error: Uncaught Error: Call to undefined function doo() in C:\xampp\htdocs\php_project\phptest.php:11 Stack trace: #0 {main} thrown in C:\xampp\htdocs\php_project\phptest.php on line 11

    जैसे ही केवल coo() फ़ंक्शन कॉल किया जाता है, कोई त्रुटि नहीं दिखाई जाती है। इसे कोड निष्पादन का शॉर्ट-सर्किट कहा जाता है, अर्थात, जब किसी फ़ंक्शन को कॉल (invoke) नहीं किया जाता है, इसके अंदर कोई कोड निष्पादित नहीं किया जाएगा। जब coo() फ़ंक्शन को कॉल करने से पहले, doo() फ़ंक्शन को कॉल किया जाता है, तो ऊपर दिखाए गए अनुसार एक ERROR (अपरिभाषित फ़ंक्शन का) दिखाया जाएगा।

<?php doo(); // आउटपुट ERROR जैसा कि नीचे दिखाया गया है, और Hello from doo() ?>


Fatal error: Cannot redeclare coo() (previously declared in C:\xampp\htdocs\php_project\phptest.php:3) in C:\xampp\htdocs\php_project\phptest.php on line 6

    आप coo() और doo() फ़ंक्शंस को परिभाषित करने से पहले, उन्हें कॉल (invoke) कर सकते हैं। और यदि आप doo(){} के अंदर परिभाषित coo(){} फ़ंक्शन (उपर्युक्त उदाहरण की पंक्ति 8, 9 और 10) को हटाते (delete) हैं, (पहले घोषित फ़ंक्शन का) कोई भी ERROR नहीं दिखाया जाएगा।

    PHP में पुनरावर्ती (recursive) फ़ंक्शंस को कॉल करना संभव है। 100-200 से अधिक रिकर्सन स्तरों के साथ रिकर्सिव फ़ंक्शन/विधि (method) कॉल, स्टैक को नष्ट (smash) कर सकते हैं और वर्तमान स्क्रिप्ट को समाप्त (terminate) कर सकते हैं। विशेष रूप से, अनंत पुनरावर्तन (infinite recursion) को प्रोग्रामिंग त्रुटि माना जाता है।

    आप अगले पृष्ठों में फ़ंक्शंस के बारे में अधिक जानेंगे।


Leave a Comment: