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


Type Declaration   in Category: पीएचपीलेवल2   by amit

🕙 Posted on 2023-06-20 at 06:01:56


वापसी-प्रकार (return type) और प्रकार-संकेत (type-hinting) पर अधिक

    पिछले पृष्ठ में , आपने सीखा है कि वैकल्पिक return कथन का उपयोग करके मान (values) लौटाए/प्राप्त किए जा सकते हैं। arrays और objects सहित कोई भी डेटा-प्रकार लौटाया जा सकता है। एक फ़ंक्शन कई मान नहीं लौटा सकता है, लेकिन array मान लौटाकर समान परिणाम प्राप्त किया जा सकता है। आप उस सरणी (array) से अलग-अलग आइटम (elements) कई तरीकों से प्राप्त कर सकते हैं:

<?php
  function numbers( int $x, int $y ) {
    $sum = $x + $y;
    $subt = $x - $y;
    $multi = $x * $y;
    $div = $x / $y;
    $mod = $x % $y;
    return [ $sum, $subt, $multi, $div, $mod ];
  }
  // 1) सरणी विनाश (array destruct­uring) के बाद सरणी के प्रत्येक सदस्य को व्यक्तिगत रूप से एकत्र किया जाएगा।
  [ $a, $b, $c, $d, $e ] = numbers( 4, 3 );
  echo $a, ' &nbsp; ', $b, ' &nbsp; ', $c, ' &nbsp; ', $d, ' &nbsp; ', $e; // आउटपुट 7   1   12   1.3333333333333   1 है
  echo '<br />';
  // 2) PHP 7.1.0 से पहले, केवल समतुल्य विकल्प list() का उपयोग रहा है
  list( $a, $b, $c, $d, $e ) = numbers( 12, 5 );
  echo $a, ' &nbsp; ', $b, ' &nbsp; ', $c, ' &nbsp; ', $d, ' &nbsp; ', $e; // आउटपुट 17   7   60   2.4   2 है
  echo '<br />';
  /* 3) लौटाए गए डेटा-प्रकार सरणी है, आप implode() फ़ंक्शन सरणी तत्वों को एक स्ट्रिंग में शामिल होने के लिए, json_encode() फ़ंक्शन जो किसी मान का JSON प्रतिनिधित्व देता है, आदि भी उपयोग कर सकते हैं। */
  foreach( numbers( 64, 6 ) as $item ) {
    echo $item . ' &nbsp; ';
  } // आउटपुट 70   58   384   10.666666666667   4   है
?>

    उपरोक्त कोड में, आप एक विशिष्ट (typical) उदाहरण देख सकते हैं जो आम तौर पर कस्टम फ़ंक्शन से परिणाम के रूप में एकाधिक मान निकालने के लिए उपयोग किया जाता है। $a, $b, $c, $d, $e चर नाम हैं, जो अलग-अलग आइटम को लौटाए गए सरणी से संग्रहीत करेंगे। उपरोक्त उदाहरण में उपयोग की गई पहली विधि को सरणी विनाशकारी (array destruct­uring) कहा जाता है, जिसमें इन नए घोषित चर नामों को [] वर्ग कोष्ठक में रखा जाता है। दूसरी (पुरानी) विधि है जिसमें list() फ़ंक्शन का उपयोग किया गया है। ऐसे कई तरीके हैं जिनसे किसी सरणी से डेटा निकाला (extract) जा सकता है। बाद के पाठों में, आप देखेंगे कि while लूप का उपयोग करके डेटाबेस से डेटा निकाला जा सकता है।

प्रकार की घोषणा (Type Declaration):

    पिछले पृष्ठ में, आपने देखा है कि bool int float string array (आरक्षित कीवर्ड) पैरामीटर के लिए टाइप-हिंटिंग के रूप में उपयोग किए जाते हैं। टाइप डिक्लेरेशन को फंक्शन आर्ग्युमेंट्स, रिटर्न वैल्यूज और PHP 7.4.0 के साथ क्लास प्रॉपर्टीज में जोड़ा जा सकता है। वे सुनिश्चित करते हैं कि कॉल के समय मान निर्दिष्ट प्रकार का है, अन्यथा एक TypeError दिखाई (throw) जाती है। उपरोक्त स्केलर प्रकार के उपनाम (Aliases) समर्थित नहीं हैं। इसके बजाय, उन्हें क्लास या इंटरफ़ेस नामों के रूप में माना जाता है। उदाहरण के लिए, boolean प्रकार की घोषणा के रूप में उपयोग करने के लिए मान को bool प्रकार के बजाय, instanceof क्लास या इंटरफ़ेस बूलियन होने की आवश्यकता होगी।

<?php function test(boolean $param) {}
    test(true); // PHP 8 में ERROR को निम्नानुसार आउटपुट करता है: ?>


Warning: "boolean" will be interpreted as a class name. Did you mean "bool"? Write "\boolean" to suppress this warning in C:\xampp\htdocs\php_project\index.php on line 1

Fatal error: Uncaught TypeError: test(): Argument #1 ($param) must be of type boolean, bool given, called in C:\xampp\htdocs\php_project\index.php on line 2 and defined in C:\xampp\htdocs\php_project\index.php:1 Stack trace: #0 C:\xampp\htdocs\php_project\index.php(2): test(true) #1 {main} thrown in C:\xampp\htdocs\php_project\index.php on line 1

    किसी वापसी मान के प्रकार की घोषणा को कस्टम फ़ंक्शन में भी नियंत्रित किया जा सकता है। वापसी प्रकार की घोषणा के लिए सिंटैक्स () कोष्ठक और : (कोलन प्रतीक) के बाद लिखा जाता है। आइए कुछ सरल उदाहरण देखें:

<?php
  function addition():int {
  $result = 3.4 + 4.2;   var_dump( $result );
  echo '<br />';
  return $result;
  } // वापसी प्रकार (return type) int है
  var_dump( addition() ); // आउटपुट float(7.6)<br />int(7) है
?>

    उपरोक्त उदाहरण में आप इसे देख सकते हैं $result = 3.4 + 4.2; का आउटपुट फ्लोट (7.6) है, जब var_dump() कस्टम फ़ंक्शन के अंदर उपयोग किया जाता है। हालांकि, वापसी प्रकार int है, और इसलिए, उपरोक्त उदाहरण में अंतिम पंक्ति int(7) आउटपुट करती है और value के बाद . (दशमलव बिंदु) हटा (छांट) दिया गया है। हालाँकि, जब उपरोक्त उदाहरण सख्त मोड में उपयोग किया जाता है, तो निम्नलिखित TypeError दिखाई देती है:

float(7.6)

Fatal error: Uncaught TypeError: addition(): Return value must be of type int, float returned in C:\xampp\htdocs\php_project\index.php:5 Stack trace: #0 C:\xampp\htdocs\php_project\index.php(7): addition() #1 {main} thrown in C:\xampp\htdocs\php_project\index.php on line 5

    निम्नलिखित उदाहरण सख्त मोड में भी ERROR नहीं दिखाएगा। mixed प्रकार की घोषणा PHP 8.0.0 में पेश की गई है और यह bool int float string array object Resource null में से एक डेटा-प्रकार हो सकता है। इसका अर्थ है कि इनमें से किसी भी डेटा प्रकार को एक कस्टम फ़ंक्शन में (तर्कों के रूप में) लिया जा सकता है, और इसे OUTPUT के रूप में भी वापस किया जा सकता है।

<?php
  function max_int_value( mixed $param ):mixed {
  return $param + 1;
  }
  var_dump( max_int_value( PHP_INT_MAX ) ); // आउटपुट float(9.223372036854776E+18)
?>

संघ (Union) प्रकार

    संघ (Union) प्रकार PHP 8.0.0 के रूप में उपलब्ध हैं। एक संघ प्रकार की घोषणा एक के बजाय कई अलग-अलग सरल प्रकारों के मूल्यों को स्वीकार करती है। कस्टम फ़ंक्शन में, आप दो या दो से अधिक सरल प्रकारों के बीच | (पाइप प्रतीक, Enter कुंजी के ठीक ऊपर, Shift कुंजी का भी उपयोग करें) का उपयोग कर सकते हैं।

<?php
  function cube( int|float $param ):int|float {
    return $param ** 3;
  }
  var_dump( cube( 4 ) ); // आउटपुट int(64)
?>

    mixed प्रकार-घोषणा object|resource|array|string|int|float|bool|null संघ प्रकार के बराबर है।

अशक्त (Nullable) प्रकार

    PHP 7.1.0 के अनुसार, प्रकार-घोषणाओं को टाइप नाम ? (प्रश्न चिह्न) के साथ उपसर्ग (prefix) करके अशक्त (nullable) चिह्नित किया जा सकता है। यह दर्शाता है कि मान निर्दिष्ट-प्रकार या null प्रकार का हो सकता है। जब आप निम्नलिखित उदाहरण में पैरामीटर से ? (प्रश्न चिह्न) हटाते हैं, और कस्टम फ़ंक्शन cuberoot() में एक तर्क के रूप में null पारित करते हैं तब, त्रुटि के रूप में आउटपुट नीचे दिखाया जाएगा।

<?php
  function cuberoot( ?float $param ):?float {
    return $param ** (1/3);
  }
  var_dump( cuberoot( 3 ) ); // आउटपुट float(1.4422495703074083)
?>


Fatal error: Uncaught TypeError: cuberoot(): Argument #1 ($param) must be of type float, null given, called in C:\xampp\htdocs\php_project\index.php on line 5 and defined in C:\xampp\htdocs\php_project\index.php:2 Stack trace: #0 C:\xampp\htdocs\php_project\index.php(5): cuberoot(NULL) #1 {main} thrown in C:\xampp\htdocs\php_project\index.php on line 2

अशक्त संघ (Nullable union) प्रकार

    null प्रकार को यूनियनों के हिस्से के रूप में समर्थित किया जाता है, जैसे कि एक अशक्त संघ बनाने के लिए int|float|null इस्तेमाल किया जा सकता है। float|null के सामान्य मामले के लिए मौजूदा संकेतन ?float को एक संक्ष्पित (छोटा रुप) माना जाता है। सावधानी: null को एक स्टैंडअलोन प्रकार के रूप में उपयोग नहीं किया जा सकता है।

झूठा-छद्म (false pseudo) प्रकार

    शाब्दिक false प्रकार को यूनियनों के हिस्से के रूप में समर्थित किया जाता है, और ऐतिहासिक कारणों से शामिल किया जाता है क्योंकि विफलताओं के लिए null के बजाय कई आंतरिक फ़ंक्शन false वापस करता है। ऐसे फ़ंक्शन का एक उत्कृष्ट उदाहरण strpos() है। सावधानी: स्टैंडअलोन प्रकार के रूप में false उपयोग नहीं किया जा सकता (nullable स्टैंडअलोन प्रकार सहित)।

    जैसे, false , false|null और ?false की अनुमति नहीं है। true शाब्दिक प्रकार मौजूद नहीं है। यदि bool संघ प्रकार में प्रयोग किया जाता है, तो false अतिरिक्त रूप से उपयोग नहीं की जा सकती है, यानी bool|false की अनुमति नहीं है। int|INT की भी अनुमति नहीं है।

Intersection प्रकार

    एक प्रतिच्छेदन (inter­section) प्रकार की घोषणा उन मानों को स्वीकार करती है जो एक एकल के बजाय कई क्लास-प्रकार की घोषणाओं को संतुष्ट करते हैं। प्रतिच्छेदन प्रकार सिंटैक्स T1&T2&.... का उपयोग करके निर्दिष्ट किए गए हैं। प्रतिच्छेदन प्रकार PHP 8.1.0 के रूप में उपलब्ध हैं।


केवल रिटर्न प्रकार

void

    void एक रिटर्न प्रकार है जो इंगित करता है कि फ़ंक्शन कोई मान नहीं लौटाता है। इसलिए यह संघ प्रकार की घोषणा का हिस्सा नहीं हो सकता। यह PHP 7.1.0 के रूप में उपलब्ध है। यहां तक ​​कि जब आप एक कस्टम फ़ंक्शन से NULL वापस लौटना चाहते हैं, तब ERROR को नीचे दिखाया जाएगा।

<?php function coo():void { return NULL; } var_dump( coo() ); // आउटपुट ERROR दिखाता है ?>


Fatal error: A void function must not return a value (did you mean "return;" instead of "return null;"?) in C:\xampp\htdocs\php_project\index.php on line 1

<?php function doo():void { return; } var_dump( doo() ); // आउटपुट कोई त्रुटि नहीं दिखाता है: NULL ?>

<?php function foo():void { echo "Hello"; } var_dump( foo() ); // Outputs HelloNULL ?>

never

    never एक रिटर्न प्रकार है जो दर्शाता है कि फ़ंक्शन (कुछ भी) वापस नहीं करता है। इसका मतलब यह है कि यह या तो exit() फ़ंक्शन को कॉल करता है, अपवाद (exception) दिखाता है, या अनंत लूप है। इसलिए यह संघ प्रकार की घोषणा का हिस्सा नहीं हो सकता। यह PHP 8.1.0 के रूप में उपलब्ध है। टाइप थ्योरी की भाषा में, never नीचे का प्रकार होता है। मतलब यह हर दूसरे प्रकार का उप प्रकार है और inheri­tance के दौरान किसी अन्य रिटर्न प्रकार को बदल (replace) सकता है।

static

    मान उसी क्लास का instanceof होना चाहिए, जिस method से काॅल किया जाता है। static PHP 8.0.0 के रूप में उपलब्ध है।


    इस पृष्ठ में आपको कई नए आरक्षित शब्दों (keywords) से परिचित कराया गया है, जैसे static void instanceof never, जो शायद आपको अभिभूत कर गए हों। Advance PHP अनुभाग में, इनमें से प्रत्येक कीवर्ड और फ़ंक्शंस की व्याख्या करना उचित होगा। उदाहरण के लिए, exit() फ़ंक्शन का उपयोग अक्सर तब किया जाता है जब आप किसी को दूसरे वेब-पेज पर पुनर्निर्देशित (redirect) करना चाहते हैं, जैसे कि भुगतान (payment) विधियाँ, आदि।


Leave a Comment: