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
Type Hinting in Category: पीएचपीलेवल2 by amit
🕙 Posted on 2023-06-17 at 10:35:12
पैरामीटर के (डेटा) प्रकार
आपने पिछले पृष्ठ में सीखा है कि किसी फ़ंक्शन को कॉल/()
कोष्ठकों में टाइप-कास्ट कर सकते हैं (फ़ंक्शन ब्लॉक {}
कर्ली ब्रेसिज़ में उपयोग करने से पहले)।
इसी तरह, कस्टम फ़ंक्शन ब्लॉक {}
कर्ली ब्रेसिज़ के अंदर सभी कोडों को संसाधित करने के बाद, लौटाए गए मान (returned value) का डेटा-प्रकार क्या होना चाहिए, इसे भी संभाला (handle) जा सकता है। याद रखें कि PHP एक ढीली डेटा-टाइप स्क्रिप्टिंग भाषा है। इसका अर्थ है कि किसी भी चर नाम के डेटा-प्रकार को किसी भी समय बदला जा सकता है। निम्नलिखित उदाहरणों में पैरामीटर के प्रकार लिखने के लिए इन विकल्पों को देखते हैं। कस्टम फ़ंक्शन में टाइप-हिंटिंग लिखने के लिए सिंटेक्स है:
<?php function
functionName( array
$param ) { /* statements inside function block */ } ?><!-- कर्ली ब्रेस बंद करने से ठीक पहले सिंगल-bool int float string array
कोष्ठकों के बिना होते हैं, जिन्हें पैरामीटर नाम के ठीक पहले लिखा जा सकता है। -->
<?php
function
addition( int
$param1, int
$param2 ) {
var_dump( $param1, $param2 ); /* परिणाम के पहले दो मानों को आउटपुट करता है, जैसा कि नीचे दिखाया गया है: */
return
$param1 + $param2; /* परिणाम के तीसरे मान को आउटपुट करता है, जैसा कि नीचे दिखाया गया है: */
}
$num1 = 2.3; $num2 = 3.4;
var_dump( $num1, $num2 ); /* आउटपुट float(2.3) float(3.4) − तर्क के मूल (original) डेटा-प्रकार */
echo '<br />';
var_dump( addition( $num1, $num2 ) ); /* आउटपुट int(2) int(3) int(5) − जब फ़ंक्शन को कॉल किया जाता है, डेटा-प्रकार को int
में बदल दिया जाता है */?>
उपरोक्त उदाहरण में, आप देख सकते हैं कि कस्टम फ़ंक्शन नाम addition के ठीक बाद ()
कोष्ठक के भीतर, int
आरक्षित कीवर्ड को प्रत्येक पैरामीटर नाम $param1 और $param2 से पहले रखा गया है। यह तर्कों का टाइप-जुगलिंग या टाइप-कोर्सन है, या कस्टम फ़ंक्शन के पैरामीटर के टाइप-हिंटिंग (डेटा-प्रकार की अपेक्षा expecting) है। कस्टम फ़ंक्शन को कॉल/
<?php
function
multiply( float
$param1, float
$param2 ) {
var_dump( $param1, $param2 ); /* प्रत्येक पैरामीटर का डेटा-प्रकार और मूल्य परिणाम से पहले दिखाता है, जब हर बार इस फ़ंक्शन को कॉल/
return
$param1 * $param2; /* परिणाम के तीसरे मान को आउटपुट करता है, जैसा कि नीचे दिखाया गया है: */
}
var_dump( multiply( true, false ) ); // आउटपुट float(1) float(0) float(0) है
echo '<br />';
var_dump( multiply( 2, '3' ) ); // आउटपुट float(2) float(3) float(6) है?>
उपरोक्त उदाहरणों में से पहले में, जब फ़्लोटिंग पॉइंट नंबरों को तर्कों के रूप में पारित किया जाता है, तो वे पूर्णांक डेटा-प्रकार में परिवर्तित हो जाते हैं। . (संख्यात्मक मान में डॉट या दशमलव बिंदु) के बाद दशमलव मान छांट (truncate) दिया जाता है और इसलिए, 2.3 और 3.4 को क्रमशः 2 और 3 में बदल दिया जाता है। दूसरा उदाहरण पहले उदाहरण के समान है, और बूलियन मान, true
और false
क्रमशः float(1) और float(0) में परिवर्तित हो जाते हैं। इसके अलावा, दूसरे उदाहरण में, 2
(पूर्णांक) और '3'
(स्ट्रिंग) क्रमशः float(2) और float(3) में परिवर्तित हो जाते हैं।
हालाँकि, उपरोक्त दो उदाहरणों में लौटाया गया (returned) मान (value) का डेटा-प्रकार अभी तक टाइप-हिंटिंग नहीं है, और वे return
कीवर्ड के बाद उल्लिखित अभिव्यक्ति (expression) का डिफ़ॉल्ट परिणाम हैं, अर्थात दो पूर्णांकों के योग से पूर्णांक डेटा-प्रकार प्राप्त होता है। इसी तरह, दो फ्लोटिंग पॉइंट नंबरों के गुणन के परिणामस्वरूप फ्लोट डेटा-टाइप होता है।
<?php
$cms_user = true; /* आप अपनी CMS प्रोजेक्ट फ़ाइलों के शीर्ष पर कुछ चर परिभाषित कर सकते हैं */
function
check_user( bool
$cms_user ) {
if( $cms_user ) { $cms_tutorial = 'visible'; }
return
$cms_tutorial;
}
echo check_user( $cms_user ); /* कुछ अनुमति प्राप्त करने के बाद, अर्थात आउटपुट visible होने पर, आप ट्यूटोरियल दिखा सकते हैं। */?>
उपरोक्त उदाहरण में, आप आमतौर पर सीएमएस (सामग्री प्रबंधन प्रणाली) में उपयोग किए जाने वाले एक व्यावहारिक उदाहरण को देख सकते हैं, जहां पैरामीटर के लिए टाइप-हिंटिंग bool
डेटा-टाइप का हो सकता है। जब डेटा-प्रकार एक तर्क के रूप में पारित किया जाता है, टाइप-कॉर्स्ड (coerced) नहीं होता है (अर्थात, उपयुक्त पैरामीटर में परिवर्तित नहीं होता है), यह घातक त्रुटि परिणाम देगा। यह कभी-कभी कुछ बग का कारण बन सकता है। आपको सावधानीपूर्वक और चालाकी से PHP स्क्रिप्ट लिखनी चाहिए। एक जटिल सीएमएस स्मार्ट (चालाक) तरीके से कोड लिखने की तरकीबें हैं।
<?php
function
my_function( string
$param ) {
var_dump( $param ); // आउटपुट ERROR जैसा कि नीचे दिखाया गया है:
}
$my_arg = []; // कोई भी स्केलर मान (लेकिन नहीं NULL
) कोई ERROR आउटपुट नहीं करेगा
my_function( $my_arg );?>
Fatal error: Uncaught TypeError: my_function(): Argument #1 ($param) must be of type string, array given, called in C:\xampp\
हालाँकि, सख्त मोड का उपयोग नहीं करने पर भी (नीचे देखें), टाइप-हिंटिंग द्वारा array
डेटा-प्रकार की अपेक्षा करने पर आपको ERROR मिलेगा, जब किसी भी फ़ंक्शन में पास किए गए तर्क स्केलर डेटा-प्रकार के होंगे (जो PHP interpreter उन्हें पैरामीटर के रूप में टाइप-जुगल नहीं कर सकता) और इसके विपरीत भी (vice-versa)। उदाहरण के लिए, जब किसी फ़ंक्शन में पैरामीटर string
डेटा-प्रकार अपेक्षित होता है, और किसी ऐरे (array) लिटरल को तर्क के रूप में पारित किया जाता है, तो आपको ERROR मिलेगा जैसा कि ऊपर दिए गए उदाहरण में दिखाया गया है।
हालाँकि, आप declare(strict_types=1);
(सख्त मोड) का उपयोग कर सकते हैं (तर्कों के रूप में केवल उन डेटा-प्रकार के मानों की अपेक्षा करने के लिए) जो किसी कस्टम फ़ंक्शन के ()
कोष्ठकों में पैरामीटर के लिए टाइप-हिंटिंग उल्लिखित हैं। सख्त टाइप-हिंटिंग केवल स्केलर प्रकार की घोषणाओं के लिए परिभाषित की गई है। यह declare()
कथन/declare()
निर्देश किसी अन्य PHP फ़ाइल में लिखते हैं, लेकिन index.php में नहीं, तो निम्नलिखित ERROR दिखाया जाएगा:
Fatal error: strict_types declaration must be the very first statement in the script in C:\xampp\
जब आप इसे अपनी PHP फ़ाइल में लिखते हैं, तो आप अपने VSCode संपादक में टेढ़ी-मेढ़ी लाल रेखा ERROR संकेत प्राप्त कर सकते हैं। ऐसा इसलिए है क्योंकि आपके प्रोजेक्ट फ़ोल्डर में index.php फ़ाइल नहीं हो सकती है । आपको एक नई फ़ाइल बनानी चाहिए, अर्थात्, index.php और उस फ़ाइल में सख्त मोड घोषणा और उपरोक्त उदाहरण लिखें। यह ऊपर दिखाया गया ERROR को हटा देगा।
जब कस्टम फ़ंक्शन बूलियन मान को तर्क के रूप में अपेक्षा करता है, और आप किसी अन्य डेटा-प्रकार का उपयोग करते हैं, उदाहरण के लिए, $cms_user = 1; (पूर्णांक डेटा-प्रकार), सख्त मोड में अनकॉट टाइप-declare(strict_types=1);
निर्देश का उपयोग करते समय (यहां तक कि index.php फ़ाइल के शीर्ष पर भी), आपको कस्टम फ़ंक्शन को कॉल/
Fatal error: Uncaught TypeError: check_user(): Argument #1 ($cms_user) must be of type bool, int given, called in C:\xampp\
जब सख्त मोड घोषणा में फ्लोट डेटा-प्रकार की अपेक्षा की जाती है, तो पूर्णांक (integer) मान पास करने पर भी, ERROR नहीं दिखाया जाएगा। हालाँकि, जब तर्क के रूप में संख्यात्मक स्ट्रिंग, यानी एकल/int
या float
टाइप-हिंटिंग को अपेक्षित किया जाता है, तब सख्त मोड में ERROR को दिखाया जाएगा।
आप अगले पेज में पैरामीटर के टाइप-हिंटिंग और कस्टम फ़ंक्शन के रिटर्न प्रकार के बारे में अधिक जानेंगे।
Leave a Comment:
Amit Sinha March 2nd, 2023 at 9:30 PM
😃 😄 😁 😆 😅 😂 😉 😊 😇 😍 😘 😚 😋 😜 😝 😶 😏 😒 😌 😔 😪 😷 😵 😎 😲 😳 😨 😰 😥 😢 😭 😱 😖 😣 😞 😓 😩 😫 😤
Ribhu March 3rd, 2023 at 9:30 PM
🐵 🐒 🐶 🐩 🐺 🐱 🐯 🐅 🐆 🐴 🐎 🐮 🐂 🐃 🐄 🐷 🐖 🐗 🐽 🐏 🐑 🐐 🐪 🐫 🐘 🐭 🐁 🐀 🐹 🐰 🐇