2013-07-31 14 views
39

मैं किसी अन्य भाग के साथ एक PHP टर्नरी ऑपरेटर कैसे लिखूं?PHP टर्नरी ऑपरेटर कैसे लिखें

मैं if और else इस तरह पीएचपी त्रिगुट ऑपरेटर के कुछ भागों के साथ बुनियादी उदाहरण देखें:

echo (true) ? "yes" : "no"; //prints yes 
echo (false) ? "yes" : "no"; //prints no 

मैं कैसे त्रिगुट ऑपरेटर में इस तरह "elseif" भाग मिलता है?

<?php 
    if($result->vocation == 1){ 
    echo "Sorcerer"; 
    }else if($result->vocation == 2){ 
    echo 'Druid'; 
    }else if($result->vocation == 3){ 
    echo 'Paladin'; 
    }else if($result->vocation == 4){ 
    echo 'Knight'; 
    }else if($result->vocation == 5){ 
    echo 'Master Sorcerer'; 
    }else if($result->vocation == 6){ 
    echo 'Elder Druid'; 
    }else if($result->vocation == 7){ 
    echo 'Royal Paladin'; 
    }else{ 
    echo 'Elite Knight'; 
    } 
?> 
+3

आप एक सरणी लुकअप मानचित्र, स्विच या बेहतर भी उपयोग कर बेहतर होगा। परिभाषा के अनुसार एक टर्नरी अगर-तो-और है। जो भी आप चाहते हैं उसे करने और करने के लिए एक टर्नरी लिखना पढ़ने/अनुसरण करना बहुत मुश्किल होगा। –

+0

@cale_b क्या आप इसे थोड़ा सा स्पष्टीकरण दे सकते हैं? मैं अभी भी PHP सीख रहा हूं और मेरे काम में मैंने केवल तभी उपयोग किया है - अन्यथा बयान, इसलिए मैं इन सभी चीजों से इतना परिचित नहीं हूं। – dinomuharemagic

+0

मैंने नीचे एक उदाहरण दिया। यदि आप डेटाबेस का उपयोग नहीं करेंगे, तो यह समाधान साफ ​​और समझने में आसान है। –

उत्तर

75

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

एक सरणी देखने "नक्शा" या "शब्दकोश", इसलिए की तरह उपयोग नहीं क्यों:

$vocations = array(
    1 => "Sorcerer", 
    2 => "Druid", 
    3 => "Paladin", 
    ... 
); 

echo $vocations[$result->vocation]; 

इस आवेदन के लिए एक त्रिगुट इस तरह लग रही अंत होगा:

echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown"))); 

क्यों है खराब? क्योंकि - एक लंबी लाइन के रूप में, अगर आपको यहां कुछ गलत होना है, तो आपको कोई वैध डिबगिंग जानकारी नहीं मिलेगी, लंबाई को पढ़ने में मुश्किल होती है, साथ ही कई टर्नरीज़ के घोंसले को अजीब लगता है।

एक मानक त्रिगुट, सरल पढ़ने के लिए आसान है, और इस प्रकार दिखाई देगा:

$value = ($condition) ? 'Truthy Value' : 'Falsey Value'; 

या

echo ($some_condition) ? 'The condition is true!' : 'The condition is false.'; 

एक त्रिगुट वास्तव में सिर्फ एक सुविधाजनक/कम एक लिखने के लिए रास्ता है सरल if else कथन। उपर्युक्त नमूने त्रिगुट में ही है के रूप में:

if ($some_condition) { 
    echo 'The condition is true!'; 
} else { 
    echo 'The condition is false!'; 
} 

हालांकि, एक जटिल तर्क के लिए एक त्रिगुट जल्दी से पढ़ने योग्य नहीं हो जाता है, और संक्षिप्तता के लायक नहीं रह गया है।

echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown"))); 

यहां तक ​​कि के साथ कुछ चौकस स्वरूपण कई लाइनों पर यह प्रसार करने के लिए, यह बहुत स्पष्ट नहीं है:

echo($result->group_id == 1 
    ? "Player" 
    : ($result->group_id == 2 
     ? "Gamemaster" 
     : ($result->group_id == 3 
      ? "God" 
      : "unknown"))); 
+0

शब्दकोश के लिए +1! इस स्थिति के लिए बिल्कुल सही! –

+0

धन्यवाद। यह विन्यास के लिए स्वच्छ और सरल है। +1! मुझे जवाब स्वीकार करने के लिए 5 मिनट का इंतजार करना है, इसलिए .. – dinomuharemagic

+2

"ए टर्नरी जो आप चाहते हैं उसके लिए एक अच्छा समाधान नहीं है।", समझाओ क्यों ... (मुझे पता है क्यों, लेकिन जवाब को उस जानकारी की आवश्यकता है) – bizzehdee

3

आप नहीं करेंगे: यह गन्दा और पढ़ने में मुश्किल है।

आप पहले मामले में switch कथन की तलाश में हैं। दूसरा ठीक है क्योंकि यह अभी भी स्थिरता

टर्नरी स्टेटमेंट बूलियन मानों और वैकल्पिक तर्क के लिए अधिक उपयुक्त है।

7
echo ($result ->vocation == 1) ? 'Sorcerer' 
     : ($result->vocation == 2) ? 'Druid' 
      : ($result->vocation == 3) ? 'Paladin' 
        .... 

; 

यह बदसूरत है। आपको सामान्य if कथनों के साथ रहना चाहिए।

+3

बदसूरत, लेकिन कभी-कभी उपयोगी। निश्चित रूप से इस आकार की बात के लिए नहीं। – MightyPork

+2

क्या आप पहले तीर से पहले उस स्थान को हटा सकते हैं? 6 वर्णों से कम संपादित नहीं कर सकते हैं। –

3

ईमानदारी से कहूं तो एक त्रिगुट ऑपरेटर केवल इस बदतर है, मैं अगर बनाने क्या सुझाव है कि बनाना होगा यह सरल क्या आप में लक्ष्य कर रहे हैं है:

$groups = array(1=>"Player", 2=>"Gamemaster", 3=>"God"); 
echo($groups[$result->group_id]); 

और फिर अपने व्यवसायों के लिए इसी तरह की एक

$vocations = array(
    1=>"Sorcerer", 
    2=>"Druid", 
    3=>"Paladin", 
    4=>"Knight", 
    .... 
); 
echo($vocations[$result->vocation]); 
एक त्रिगुट ऑपरेटर के साथ

, आप

echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown"))); 

कौन सा रूप में आप बता सकते हैं, केवल और जटिल हो जाता के साथ खत्म हो जाएगा और अधिक आप उसमें जोड़

3

मैं था बल्कि त्रिगुट अगर- से बयान एक स्विच-केस के साथ जाते हैं। उदाहरण के लिए:

switch($result->vocation){ 
case 1: 
    echo "Sorcerer"; 
    break; 
case 2: 
    echo "Druid"; 
    break; 
case 3: 
    echo "Paladin"; 
    break; 
case 4: 
    echo "Knight"; 
    break; 
case 5: 
    echo "Master Sorcerer"; 
    break; 
case 6: 
    echo "Elder Druid"; 
    break; 
case 7: 
    echo "Royal Paladin"; 
    break; 
default: 
    echo "Elite Knight"; 
    break; 
} 
2

अन्य सभी उत्तर देने के लिए इसके अलावा, आप switch इस्तेमाल कर सकते हैं। लेकिन यह थोड़ा लंबा लगता है।

switch ($result->vocation) { 
case 1: 
    echo 'Sorcerer'; 
    break; 

case 2: 
    echo 'Druid'; 
    break; 

case 3: 
    echo 'Paladin'; 
    break; 

case 4: 
    echo 'Knight'; 
    break; 

case 5: 
    echo 'Master Sorcerer'; 
    break; 

case 6: 
    echo 'Elder Druid'; 
    break; 

case 7: 
    echo 'Royal Paladin'; 
    break; 

default: 
    echo 'Elite Knight'; 
    break; 
} 
8

चूंकि यह एक आम काम होगा, इसलिए मैं फ़ंक्शन कॉल के अंदर एक स्विच/केस लपेटने का सुझाव दूंगा।

function getVocationName($vocation){ 
    switch($vocation){ 
     case 1: return "Sorcerer"; break; 
     case 2: return 'Druid'; break; 
     case 3: return 'Paladin'; break; 
     case 4: return 'Knight'; break; 
     case 5: return 'Master Sorcerer'; break; 
     case 6: return 'Elder Druid'; break; 
     case 7: return 'Royal Paladin'; break; 
     default: return 'Elite Knight'; break; 
    } 
} 

echo getVocationName($result->vocation); 
+19

' जब आप 'वापसी' का उपयोग कर रहे हों तो ब्रेक अनावश्यक हैं। – mpen

4

एक बुनियादी पीएचपी त्रिगुट ऑपरेटर लिखने के लिए कैसे:

($your_boolean) ? 'This is returned if true' : 'This is returned if false'; 

उदाहरण: एक 'elseif' वहाँ में crammed साथ

$myboolean = true; 
echo ($myboolean) ? 'foobar' : "penguin"; 
foobar 

echo (!$myboolean) ? 'foobar' : "penguin"; 
penguin 

एक PHP त्रिगुट ऑपरेटर:

$chow = 3; 
echo ($chow == 1) ? "one" : ($chow == 2) ? "two" : "three"; 
three 

लेकिन कृपया पार्लर चाल के अलावा घोंसला टर्नरी ऑपरेटरों को न करें। यह एक खराब कोड गंध है।

+0

यह मूल प्रश्न का उत्तर देता है, जिसे खराब शीर्षक दिया गया था। – dreftymac

संबंधित मुद्दे