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


match & switch   in Category: पीएचपी   by amit

🕙 Posted on 2023-06-09 at 11:52:51


match अभिव्यक्ति और switch के बारे में अधिक

    match एक्सप्रेशन (अभिव्यक्ति) PHP 8.0.0 में पेश (introduced) किया गया है। switch के विपरीत, match मान का टर्नरी एक्सप्रेशन के जैसे मूल्यांकन करेगा। इसके अलावा, switch के विपरीत, कमजोर/ढीली जांच (==) के बजाय match एक सख्त जांच (===) तुलना करता है। match एक्सप्रेशन इस पृष्ठ के नीचें वर्णित हैं।

    आपने पिछले पृष्ठ में switch और if-elseif-else ब्लॉक के बीच समानता देखी है। निम्नलिखित उदाहरण आपको यह समझाने के लिए है कि if-elseif-else ब्लॉक से, पिछले पृष्ठ पर दिए गए, ग्रेड खोजने के लिए कोड को निम्नानुसार लिखा जा सकता है। निम्नलिखित उदाहरण में, जब कई case विकल्पों के बाद, यानी : (कोलन प्रतीक) के बाद कथन (statements) बिल्कुल समान (duplicate) हैं , तो आपको उन case विकल्पों में से प्रत्येक के लिए एक ही जैसे कथनों का (डुप्लिकेशंस) लिखने की ज़रूरत नहीं है।

    जिस डेटा (या मान) की जांच की जानी है, उसकी एक case शाब्दिक के साथ तुलना की जाती है, तो इसके नीचे के सभी कथनों को निष्पादित किया जाएगा, जब तक कि PHP interpreter कोई break कथन नहीं पाता है, या switch ब्लॉक के घुंघराले ब्रेस को बंद } कर देता है । निम्नलिखित उदाहरण में case के बाद एक : (कोलन) के बजाय एक ; (अर्धविराम) का उपयोग करना संभव है।

<?php
  $my_score = 75;
  switch( $my_score ) {
    case 100:
    case 99:
    case 98:
    case 97:
    case 96:
    case 95:
      echo 'A+';   break;
    case 94:
    case 93:
    case 92:
    case 91:
    case 90:
      echo 'A';   break;
    case 89:
    case 88:
    case 87:
    case 86:
    case 85:
      echo 'B+';   break;
    case 84:
    case 83:
    case 82:
    case 81:
    case 80:
      echo 'B';   break;
    case 79:
    case 78:
    case 77:
    case 76:
    case 75:
      echo 'C+';   break;
    case 74:
    case 73:
    case 72:
    case 71:
    case 70:
      echo 'C';   break;
    case 69:
    case 68:
    case 67:
    case 66:
    case 65:
      echo 'D+';   break;
    case 64:
    case 63:
    case 62:
    case 61:
    case 60:
      echo 'D';   break;
    case 59:
    case 58:
    case 57:
    case 56:
    case 55:
      echo 'E+';   break;
    case 54:
    case 53:
    case 52:
    case 51:
    case 50:
      echo 'E';   break;
    default:
      echo 'F';
  }
?>

    उपरोक्त उदाहरण के लिए, जैसा कि पिछले पृष्ठ में बताया गया है, यह स्पष्ट है कि if-elseif-else ब्लॉक की श्रृंखला लिखना ज्यादा आसान है। यदि आप शाब्दिक (literal) के बजाय अभिव्यक्ति का उपयोग करते हैं, तो case कीवर्ड के बाद प्रत्येक विकल्प का मूल्यांकन (एक्सप्रेशन के रूप में) किया जाएगा। case कीवर्ड के बाद की अभिव्यक्ति एक सशर्त (conditional) अभिव्यक्ति होनी चाहिए। जब इस तरह के एक्सप्रेशन का आउटपुट true है, तो उस case के बाद के सभी स्टेटमेंट (कथन) निष्पादित (execute) किए जाएंगे। उपरोक्त उदाहरण को इस प्रकार लिखा जा सकता है −

<?php
  $my_score = 75;
  switch( true ) {
    case $my_score - 50 >= 45:
      echo 'A+';   break;
    case $my_score - 50 >= 40:
      echo 'A';   break;
    case $my_score - 50 >= 35:
      echo 'B+';   break;
    case $my_score - 50 >= 30:
      echo 'B';   break;
    case $my_score - 50 >= 25:
      echo 'C+';   break;
    case $my_score - 50 >= 20:
      echo 'C';   break;
    case $my_score - 50 >= 15:
      echo 'D+';   break;
    case $my_score - 50 >= 10:
      echo 'D';   break;
    case $my_score - 50 >= 5:
      echo 'E+';   break;
    case $my_score - 50 >= 0:
      echo 'E';   break;
    default:
      echo 'F';
  }
?>

    उपरोक्त उदाहरण में, यदि आप एक case के बाद लिटरल वैल्यू 1 लिखते हैं, तो इससे कोई फर्क नहीं पड़ता कि $my_score को कोई भी वैल्यू असाइन की गई है, जब वह case PHP interpreter द्वारा संसाधित किया जाता है, तो उसके बाद के सभी कथन आउटपुट होंगे (true ढीली तुलना का मूल्यांकन 1 के रूप में किया जाता है)।

    हालाँकि, case कीवर्ड के बाद शाब्दिक (literal) मान स्ट्रिंग डेटा-प्रकार का हो सकता है। इस मामले में, स्ट्रिंग डेटा की case शाब्दिक के साथ तुलना करने के लिए switch ब्लॉक बहुत उपयोगी है । निम्नलिखित उदाहरण सीएमएस CMS (या जटिल वेबसाइट संरचना) में स्विच ब्लॉक की उपयोगिता की व्याख्या करता है।

<?php
  $cms_user = 'admin';
  switch( $cms_user ) {
    case 'admin':
      echo 'आपके पास हर चीज की अनुमति है।';   break;
    case 'author':
      echo 'आपको केवल सामग्री लिखने की अनुमति है।';   break;
    case 'subscriber':
      echo 'आपके पास सभी ट्यूटोरियल पढ़ने की अनुमति है।';   break;
    case 'manager':
      echo 'आपको केवल उपयोगकर्ता डेटा प्रबंधित करने की अनुमति है।';   break;
    case 'public':
      echo 'आपके पास केवल मुफ्त ट्यूटोरियल्स की अनुमति है।';   break;
    default:
      echo 'आपको किसी भी चीज़ की अनुमति नहीं है। कृपया सदस्यता लें।';
  }
?>


match अभिव्यक्ति

    मैच (match) एक्सप्रेशन संपूर्ण (exhaustive) होना चाहिए। इसका मतलब यह है कि जब मैच एक्सप्रेशन के अंदर कोई भी विकल्प () कोष्ठक में पारित (तुलना की जाने वाली) डेटा के समान नहीं है, तो एक ERROR दिखाया जाएगा। एक मैच अभिव्यक्ति को अंत में } समापन घुंघराले ब्रेस के बाद एक ; (सेमी-कोलोन) द्वारा समाप्त किया जाना चाहिए। एक मैच अभिव्यक्ति एक मान लौटाती (returns) है, और इसे एक चर/स्थिर नाम में संग्रहीत किया जा सकता है।

    एक switch कथन कोड का एक ब्लॉक है, और {} (घुंघराले ब्रेसिज़) के अंदर, आपको case के बाद सभी कथनों को ; (सेमी-कोलोन) के साथ समाप्त करना होगा। लेकिन, एक मैच वास्तव में एक अभिव्यक्ति है, और {} (घुंघराले ब्रेसिज़) के अंदर सभी कथनों को , (काॅमा) से अलग किया जाता है। match(){} अभिव्यक्ति का वाक्य-विन्यास (syntax) एक साहचर्य सरणी (associative array) के समान है।

<?php
  $my_grade = 1; // एक साधारण match अभिव्यक्ति नीचे दिखाई गई है
  $my_result = match( $my_grade ) {
    0 => 'ZERO',     1 => 'ONE',
    2 => 'TWO',       3 => 'THREE',
    4 => 'FOUR',     5 => 'FIVE',
    default => 'other'
  };
  echo $my_result; // आउटपुट ONE है
?>

    जैसा कि आप उपरोक्त उदाहरण में देख सकते हैं कि एक match अभिव्यक्ति में, break या case कीवर्ड की कोई आवश्यकता नहीं है। मैच एक्सप्रेशन केवल एक शर्त (condition) की जाँच करता है और दूसरों को छोड़ देता है। एक switch ब्लॉक में, जब default कीवर्ड प्रदान नहीं किया जाता है, और () कोष्ठक में दिए गए डेटा के साथ कोई case मेल नहीं खाता है, तो कोई त्रुटि नहीं होगी। लेकिन मैच एक्सप्रेशन UnhandledMatchError आउटपुट देगा जब {} कर्ली ब्रेसिज़ के अंदर कोई आर्म arm (विकल्प) () कोष्ठक में दिए गए डेटा से मेल नहीं खाता है।

<?php
  $my_score = 75; // ऊपर स्विच ब्लॉक के समान match अभिव्यक्ति नीचे दिखाई गई है
  $my_result = match( $my_score ) {
    100, 99, 98, 97, 96, 95 => 'A+',
    94, 93, 92, 91, 90         => 'A',
    89, 88, 87, 86, 85         => 'B+',
    84, 83, 82, 81, 80         => 'B',
    79, 78, 77, 76, 75         => 'C+',
    74, 73, 72, 71, 70         => 'C',
    69, 68, 67, 66, 65         => 'D+',
    64, 63, 62, 61, 60         => 'D',
    59, 58, 57, 56, 55         => 'E+',
    54, 53, 52, 51, 50         => 'E',
    $my_score < 50         => 'F',
    default => 'other'
  };
  echo $my_result; // आउटपुट C+ है
?>

<?php
  $my_score = 75; // उपरोक्त match अभिव्यक्ति को इस प्रकार भी लिखा जा सकता है
  $my_result = match( true ) {
    $my_score >= 95 => 'A+',
    $my_score >= 90 => 'A',
    $my_score >= 85 => 'B+',
    $my_score >= 80 => 'B',
    $my_score >= 75 => 'C+',
    $my_score >= 70 => 'C',
    $my_score >= 65 => 'D+',
    $my_score >= 60 => 'D',
    $my_score >= 55 => 'E+',
    $my_score >= 50 => 'E',
    $my_score < 50 => 'F',
    default => 'other'
  };
  echo $my_result; // आउटपुट C+ है
?>

<?php
  $cms_user = 'admin';
  $my_result = match( $cms_user ) {
    'admin' => 'आपके पास हर चीज की अनुमति है।',
    'author' => 'आपको केवल सामग्री लिखने की अनुमति है।',
    'subscriber' => 'आपके पास सभी ट्यूटोरियल पढ़ने की अनुमति है।',
    'manager' => 'आपको केवल उपयोगकर्ता डेटा प्रबंधित करने की अनुमति है।',
    'public' => 'आपके पास केवल मुफ्त ट्यूटोरियल्स की अनुमति है।',
    default => 'आपको किसी भी चीज़ की अनुमति नहीं है। कृपया सदस्यता लें।'
  };
  echo $my_result; // आउटपुट आपके पास हर चीज की अनुमति है।
?>

    एक match अभिव्यक्ति में, => (तीर) ऑपरेटर के बाद के कथन को कुछ (उपयोगकर्ता परिभाषित) कस्टम फ़ंक्शन (function) के साथ बदला जा सकता है। अगली श्रेणी (category) में, यानी पीएचपी लेवल 2, आप सीखेंगे कि कस्टम फ़ंक्शंस कैसे बनाएं, इसके अलावा, और भी बहुत कुछ आप सीखेंगे।


Leave a Comment: