PHP ऑपरेटर "?" और ":" क्या कहते हैं और वे क्या करते हैं?




syntax conditional (8)

जैसा कि जॉन टी कहते हैं, इसे एक टर्नरी ऑपरेटर कहा जाता है और अनिवार्य रूप से एक if / else कथन का एक लघु संस्करण है। आपका उदाहरण, पूर्ण / अगर कथन के रूप में, पढ़ा जाएगा;

if($request_type == 'SSL')
{
    HTTPS_SERVER;
}
else
{
    HTTP_SERVER;
}

क्या हैं और : PHP में ऑपरेटरों?

उदाहरण के लिए:

(($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER)

वाक्यों को लिखने का यह एक छोटा तरीका है। इसका उपयोग जावा, जावास्क्रिप्ट और अन्य जैसी अन्य भाषाओं में भी किया जाता है।

तुम्हारा कोड,

$protocol = $request_type == 'SSL' ? HTTPS_SERVER : HTTP_SERVER;

इस तरह लिखा जा सकता है:

if ($request_type == 'SSL')
    $protocol = HTTPS_SERVER;
else
    $protocol = HTTP_SERVER;

सशर्त ऑपरेटर ? : ? : एक ऑपरेटर है जिसका उपयोग किसी शर्त की जांच करने के लिए किया जाता है और स्थिति के मूल्य के आधार पर मूल्य का चयन करता है। यह निम्नलिखित रूप में व्यक्त किया गया है:

variable = condition ? expression1 : expression2;

यह निम्नानुसार काम करता है ...

  1. सबसे पहले, स्थिति का मूल्यांकन किया जाता है।
  2. यदि स्थिति सत्य है, तो अभिव्यक्ति 1 evalauated है। और अभिव्यक्ति 1 का मान वैरिएबल को असाइन किया गया है
  3. यदि स्थिति गलत है, तो अभिव्यक्ति 2 का मूल्यांकन किया जाता है। और अभिव्यक्ति 2 का मान चर के लिए असाइन किया गया है।

उदाहरण के लिए:

x = (a>b) ? 5 : 9

इसमें, एक्स के लिए, सबसे पहले स्थिति (ए> बी) का मूल्यांकन किया जाता है। यदि यह स्थिति सत्य हो जाती है, तो एक्स मान 5 बन जाएगा (यानी, x = 5)। लेकिन अगर स्थिति (ए> बी) गलत हो जाती है, तो एक्स मान 9 प्राप्त करेगा (यानी, x = 9)।

टर्नरी ऑपरेटर

कभी-कभी सशर्त ऑपरेटर ? : ? : एक टर्नरी ऑपरेटर भी कहा जाता है। ऐसा इसलिए है क्योंकि इसमें तीन ऑपरेंड शामिल हैं। उदाहरण के लिए:

x ? y : z

यहां, एक्स, वाई और जेड तीन ऑपरेंड हैं। यदि स्थिति x सत्य है, तो मान y असाइन किया गया है अन्यथा मान z असाइन किया गया है।


मैं टर्नरी पर थोड़ा सा लिखने जा रहा हूं, वे क्या हैं, उनका उपयोग कैसे करें, कब और क्यों उनका उपयोग करें और जब उनका उपयोग न करें।

एक टर्नरी ऑपरेटर क्या है?

एक टर्नरी ? : ? : if और else लिए शॉर्टेंड else । यह मूल रूप से यह है। आधिकारिक स्पष्टीकरण के लिए इस पृष्ठ के नीचे "टर्नरी ऑपरेटर" आधे रास्ते देखें।

PHP 5.3 के रूप में :

PHP 5.3 के बाद से, टर्नरी ऑपरेटर के मध्य भाग को छोड़ना संभव है। अभिव्यक्ति expr1?: Expr3 expr1 देता है अगर expr1 TRUE का मूल्यांकन करता है, और अन्यथा expr3।

PHP 7.0 के रूप में

PHP 7 में न्यू नल कोलेसेस ऑपरेटर है। यह एक टर्नरी जैसा ही है लेकिन उसे " जारीकर्ता टर्नरी " भी कहा जाता है। यह जंजीर ternaries के एक सेट की अनुमति देता है जो जारी () चेक की आवश्यकता को हटा देता है।

PHP 5 में, यदि आप संभावित रूप से मौजूद अस्तित्व वाले चर के साथ एक टर्नरी का उपयोग करना चाहते हैं तो आपको तीसरे कथन की शुरुआत में एक जारीकर्ता () करना होगा:

$result = isset($nonExistentVariable) ? $nonExistentVariable : ‘default’;

PHP 7 में, अब आप इसके बजाय ऐसा कर सकते हैं:

$result = $nonExistentVariable ?? ‘default’;

नल कोलेसेस ऑपरेटर एक खाली स्ट्रिंग के साथ काम नहीं करता है, इसलिए, इसे ध्यान में रखें। इसके बारे में सबसे अच्छी बात यह है कि आप ऑपरेटरों को एकाधिक चर के लिए एकाधिक चेक के लिए भी चेन कर सकते हैं, इस बात पर निर्भर करता है कि श्रृंखला में प्रत्येक चर मौजूद है या नहीं:

$user = $userImpersonatingAnotherUser ?? $loggedInUser ?? “Guest”;

PHP में, ऐसे सिस्टम के साथ जहां उपयोगकर्ता लॉगिन कर सकता है, व्यवस्थापक के लिए परीक्षण प्रयोजनों के लिए किसी अन्य उपयोगकर्ता का प्रतिरूपण करने में सक्षम होना असामान्य नहीं है। उपर्युक्त उदाहरण के साथ, यदि उपयोगकर्ता किसी अन्य उपयोगकर्ता का प्रतिरूपण नहीं कर रहा है, और उपयोगकर्ता में लॉग इन भी मौजूद नहीं है, तो उपयोगकर्ता इसके बजाय अतिथि उपयोगकर्ता होगा। यदि आप अभी तक यह नहीं समझते हैं कि क्या टर्नरी हैं और उनका उपयोग कैसे किया जाता है, तो और पढ़ें, और फिर यह देखने के लिए वापस जाएं कि नया PHP

टर्नरीज़ कैसे उपयोग किए जाते हैं?

if स्टेटमेंट दिखता है if सामान्य कैसे है:

if (isset($_POST['hello']))
{
    $var = 'exists';
}
else
{
    $var = 'error';
}

चलो इसे एक टर्नरी में कम करें।

$var = isset($_POST['hello']) ? 'exists' : 'error';
                 ^            ^     ^    ^     |
                 |           then   |   else   |
                 |                  |          |
          if post isset         $var=this   $var=this

बहुत छोटा, लेकिन शायद पढ़ने के लिए मुश्किल है। न केवल वे पिछले उदाहरण में $var जैसे चर सेट करने के लिए उपयोग किए जाते हैं, लेकिन आप इसे echo साथ भी कर सकते हैं, और यह जांचने के लिए कि कोई चर गलत है या नहीं:

$isWinner = false;

// Outputs 'you lose'
echo ($isWinner) ? 'You win!' : 'You lose';

// Same goes for return
return ($isWinner) ? 'You win!' : 'You lose';

लोग उनका उपयोग क्यों करते हैं?

मुझे लगता है कि टर्नरी सेक्सी हैं। कुछ डेवलपर्स दिखाना पसंद करते हैं, लेकिन कभी-कभी टर्नरी सिर्फ आपके कोड में अच्छा लगते हैं , खासकर जब पीएचपी 5.4 के नवीनतम लघु ईकोस जैसी अन्य सुविधाओं के साथ मिलते हैं।

<?php 
    $array = array(0 => 'orange', 1 => 'multicoloured'); 
?>

<div>
    <?php foreach ($array as $key => $value) { ?>
        <span><?=($value==='multicoloured')?'nonsense':'pointless'?></span>
    <?php } ?>
</div>

<!-- Outputs:
    <span>
        pointless
    </span>
    <span>
        nonsense
    </span> 
-->

जब आप 'व्यू / टेम्पलेट' में हों (यदि आप MVC प्रतिमान के माध्यम से अपनी चिंताओं को अलग कर रहे हैं) तो ऑफ-विषय थोड़ा सा जा रहा है, तो आप जितना संभव हो सके सर्वर-साइड लॉजिक के रूप में चाहते हैं। तो, टर्नरी और अन्य शॉर्ट-हाथ कोड का उपयोग करना कभी-कभी सबसे अच्छा तरीका है। "अन्य शॉर्ट-हाथ कोड" से मेरा मतलब है:

if ($isWinner) :
    // Show something cool
endif;

ध्यान दें, अगर मैं व्यक्तिगत रूप से इस तरह के शॉर्टेंड को पसंद नहीं करता / endif बकवास

टर्नरी ऑपरेटर कितनी तेज़ है?

माइक्रो-ऑप्टिमाइज़ेशन की तरह लोग। वे बस करते हैं। तो कुछ के लिए, यह जानना महत्वपूर्ण है कि सामान्य / सामान्य कथन की तुलना में टर्नरी जैसी कितनी तेज चीजें होती हैं।

इस पोस्ट को पढ़ना, अंतर लगभग 0.5ms हैं। यह बहुत ज्यादा है!

ओह रुको, नहीं, यह नहीं है। यह केवल तभी बहुत है जब आप बार-बार हजारों लोगों को एक पंक्ति में कर रहे हैं। जो आप नहीं होंगे इसलिए गति अनुकूलन के बारे में चिंता न करें, यह बिल्कुल बिल्कुल व्यर्थ है।

जब टर्नरी का उपयोग नहीं किया जाता है

आपका कोड होना चाहिए:

  • पढ़ने में अासान
  • समझने में आसान
  • संशोधित करने में आसान है

जाहिर है यह आपके कोड को देखने के लिए आने वाली अवधारणाओं पर व्यक्तियों की खुफिया जानकारी और कोडिंग ज्ञान / सामान्य स्तर के कोडिंग के अधीन है। पिछले उदाहरणों की तरह एक साधारण टर्नरी ठीक है, कुछ ऐसा है, हालांकि, ऐसा नहीं है कि आपको क्या करना चाहिए:

echo ($colour === 'red') ? "Omg we're going to die" :
     ($colour === 'blue' ? "Ah sunshine and daisies" :
     ($colour === 'green' ? "Trees are green"
     : "The bloody colour is orange, isn't it? That was pointless."));

यह तीन कारणों से व्यर्थ था:

  • हास्यास्पद रूप से लंबे समय तक चलने वाला एम्बेडिंग
  • बस एक switch स्टेटमेंट इस्तेमाल किया जा सकता था
  • यह पहली जगह नारंगी था

निष्कर्ष

टर्नरी वास्तव में सरल हैं और इसके बारे में भी काम करने के लिए कुछ भी नहीं है। किसी भी गति में सुधार पर विचार न करें, यह वास्तव में कोई फर्क नहीं पड़ेगा। उनका उपयोग करें जब वे सरल हों और अच्छे लगें , और हमेशा सुनिश्चित करें कि आपका कोड भविष्य में दूसरों द्वारा पठनीय होगा। यदि इसका मतलब कोई टर्नरी नहीं है, तो टर्नरीज़ का उपयोग न करें।


इसे कभी-कभी टर्नरी सशर्त ऑपरेटर के रूप में जाना जाता है। टर्नरी का मतलब है कि इसमें तीन तर्क हैं, x ? y : z रूप में x ? y : z x ? y : z । असल में, यह जांचता है कि x सत्य है या नहीं; यदि यह है, तो इस ऑपरेशन के बजाय y डाल दें, अन्यथा z

$hello = $something ? "Yes, it's true" : "No, it's false";

यह मूल रूप से एक else - कथन लिखने का एक शानदार तरीका है। कुछ कहते हैं कि इसे पढ़ना आसान है, कुछ नहीं कहते हैं।

en.wikipedia.org/wiki/Ternary_operator


यह सशर्त ऑपरेटर है

$x ? $y : $z

का मतलब है "अगर $x सत्य है, तो $y उपयोग करें, अन्यथा $z उपयोग करें"।

इसका एक छोटा सा रूप भी है।

$x ?: $z

का मतलब है "अगर $x सत्य है, तो $x उपयोग करें, अन्यथा $z उपयोग करें"।

लोग आपको बताएंगे कि ?: "टर्नरी ऑपरेटर" है। ये गलत है। ?: एक टर्नरी ऑपरेटर है, जिसका अर्थ है कि इसमें तीन ऑपरेंड हैं। लोग सोचते हैं कि इसका नाम "टर्नरी ऑपरेटर" है क्योंकि यह अक्सर दी गई भाषा का एकमात्र टर्नरी ऑपरेटर होता है।


अगर कथन है तो यह एक पंक्ति है:

condition ? true : false

आपके मामले में कथन के सामान्य में अनुवाद किया गया, यह होगा:

if($request_type == 'SSL') HTTPS_SERVER;
else HTTP_SERVER;




conditional-operator