परिचय
PHP में गणितीय, स्ट्रिंग, दिनांक, सरणी फ़ंक्शन्स आदि जैसे बड़ी संख्या में बिल्ट-इन फ़ंक्शन्स हैं। विशिष्ट आवश्यकता के अनुसार फ़ंक्शन को परिभाषित करना भी संभव है। ऐसे फ़ंक्शन को उपयोगकर्ता-परिभाषित फ़ंक्शन कहा जाता है।
एक फ़ंक्शन स्टेटमेंट्स का एक पुन: प्रयोज्य ब्लॉक है जो एक विशिष्ट कार्य करता है। इस ब्लॉक को function कीवर्ड के साथ परिभाषित किया जाता है और इसे एक नाम दिया जाता है जो वर्णमाला या अंडरस्कोर से शुरू होता है। इस फ़ंक्शन को प्रोग्राम में कहीं से भी कितनी भी बार कॉल किया जा सकता है।
सिंटैक्स
// फ़ंक्शन परिभाषित करें
function myfunction($arg1, $arg2, ... $argn) {
statement1;
statement2;
..
..
return $val;
}
// फ़ंक्शन कॉल करें
$ret = myfunction($arg1, $arg2, ... $argn);
फ़ंक्शन को वैकल्पिक लेकिन किसी भी संख्या में आर्गुमेंट्स के साथ परिभाषित किया जा सकता है। हालांकि, कॉल करते समय समान संख्या में आर्गुमेंट्स प्रदान किए जाने चाहिए। फ़ंक्शन का बॉडी कोई भी वैध PHP कोड यानी कंडीशनल्स, लूप्स आदि शामिल कर सकता है (यहां तक कि अन्य फ़ंक्शन्स या क्लासेस भी फ़ंक्शन के अंदर परिभाषित की जा सकती हैं)। ब्लॉक में स्टेटमेंट्स निष्पादित होने के बाद, प्रोग्राम कंट्रोल उस स्थान पर वापस चला जाता है जहां से इसे बुलाया गया था, चाहे फ़ंक्शन ब्लॉक का अंतिम स्टेटमेंट return हो या न हो। return स्टेटमेंट के सामने एक एक्सप्रेशन इसके मान को कॉलिंग वातावरण में लौटाता है।
उदाहरण
उदाहरण 1: बुनियादी उपयोगकर्ता-परिभाषित फ़ंक्शन
<?php
// फ़ंक्शन परिभाषा
function sayHello() {
echo "Hello World!";
}
// फ़ंक्शन कॉल
sayHello();
?>
आउटपुट
Hello World!
उदाहरण 2: आर्गुमेंट्स के साथ फ़ंक्शन
<?php
function add($arg1, $arg2) {
echo $arg1 + $arg2 . "\n";
}
add(10, 20);
add("Hello", "World");
?>
आउटपुट
30 PHP Warning: A non-numeric value encountered in line 3
दूसरे कॉल में, दो स्ट्रिंग मान फ़ंक्शन आर्गुमेंट्स के रूप में दिए गए हैं। चूंकि PHP स्ट्रिंग्स के लिए + ऑपरेटर का समर्थन नहीं करता, एक चेतावनी उत्पन्न होती है।
उदाहरण 3: रिटर्न मान के साथ फ़ंक्शन
<?php
function add($arg1, $arg2) {
return $arg1 + $arg2;
}
$val = add(10, 20);
echo "addition:" . $val . "\n";
$val = add("10", "20");
echo "addition: $val";
?>
आउटपुट
addition:30 addition:30
दूसरे कॉल में, भले ही आर्गुमेंट्स स्ट्रिंग हों, PHP उन्हें पूर्णांक में बलपूर्वक परिवर्तित करता है और जोड़ करता है।
उदाहरण 4: डिफ़ॉल्ट आर्गुमेंट मान के साथ फ़ंक्शन
फ़ंक्शन परिभाषित करते समय, आर्गुमेंट का डिफ़ॉल्ट मान असाइन किया जा सकता है। यदि फ़ंक्शन कॉल करते समय ऐसे आर्गुमेंट को मान नहीं दिया जाता है, तो प्रोसेसिंग के लिए यह डिफ़ॉल्ट उपयोग किया जाएगा।
<?php
function welcome($user = "Guest") {
echo "Hello $user\n";
}
// डिफ़ॉल्ट ओवरराइड करता है
welcome("admin");
// डिफ़ॉल्ट उपयोग करता है
welcome();
?>
आउटपुट
Hello admin Hello Guest
उदाहरण 5: वेरिएबल संख्या में आर्गुमेंट्स के साथ फ़ंक्शन
किसी फ़ंक्शन को वेरिएबल संख्या में आर्गुमेंट्स प्राप्त करने की क्षमता के साथ परिभाषित करना संभव है। फ़ंक्शन परिभाषा में औपचारिक आर्गुमेंट का नाम ... टोकन से उपसर्गित होता है।
<?php
function add(...$numbers) {
$ttl = 0;
foreach ($numbers as $num) {
$ttl = $ttl + $num;
}
return $ttl;
}
$total = add(10, 15, 20);
echo "total= $total\n";
echo "total=" . add(1, 2, 3, 4, 5) . "\n";
?>
आउटपुट
total= 45 total=15
उदाहरण 6: func_get_args() का उपयोग
func_get_args() फ़ंक्शन की सहायता से फ़ंक्शन को पास किए गए आर्गुमेंट्स की सूची प्राप्त करना भी संभव है। हम पास किए गए आर्गुमेंट्स की सूची में प्रत्येक मान को पार करने के लिए PHP लूप चला सकते हैं। उस स्थिति में फ़ंक्शन परिभाषा में औपचारिक आर्गुमेंट नहीं होता।
<?php
function add() {
$numbers = func_get_args();
$ttl = 0;
foreach ($numbers as $num) {
$ttl = $ttl + $num;
}
return $ttl;
}
$total = add(10, 15, 20);
echo "total= $total\n";
echo "total=" . add(1, 2, 3, 4, 5) . "\n";
?>
आउटपुट
total= 45 total=15
उदाहरण 7: दूसरे फ़ंक्शन के अंदर फ़ंक्शन
एक फ़ंक्शन को दूसरे फ़ंक्शन के बॉडी ब्लॉक के अंदर परिभाषित किया जा सकता है। हालांकि, आंतरिक फ़ंक्शन को बाहरी फ़ंक्शन के आह्वान से पहले नहीं बुलाया जा सकता।
<?php
function hello() {
echo "Hello\n";
function welcome() {
echo "Welcome to TutorialsPoint\n";
}
}
// welcome(); // कमेंट हटाकर hello() से पहले welcome() कॉल करें
hello();
welcome();
?>
hello() से पहले welcome() कॉल करने के लिए कमेंट हटाएं। निम्न त्रुटि संदेश प्रोग्राम को रोक देता है:
Fatal error: Uncaught Error: Call to undefined function welcome()
आउटपुट
Hello Welcome to TutorialsPoint
उदाहरण 8: रिकर्सिव फ़ंक्शन
एक फ़ंक्शन जो खुद को कॉल करता है उसे रिकर्सिव फ़ंक्शन कहा जाता है। बिना शर्त खुद को कॉल करने से अनंत लूप बनता है और स्टैक फुल होने के कारण आउट ऑफ मेमोरी त्रुटि होती है। निम्न प्रोग्राम factorial() फ़ंक्शन को रिकर्सिवली कॉल करता है:
<?php
function factorial($n) {
if ($n < 2) {
return 1;
} else {
return ($n * factorial($n - 1));
}
}
echo "factorial(5) = " . factorial(5);
?>
आउटपुट
factorial(5) = 120