2011-06-22 15 views
11

मेरे पास एक स्ट्रिंग है जिसे मैं इसे किसी अन्य स्ट्रिंग को जोड़ना चाहता हूं। मान लें:PHP अगर शॉर्टेंड

$my_string = 'Hello'; 

$my_string .= ' there'; 

यह 'हैलो वहां' वापस आ जाएगा।

मैं इस इस तरह सशर्त बनाना चाहते:

$my_string = 'Hello'; 

$append = 'do'; 

if ($append == 'do') { 

    $my_string .= ' there'; 

} 

अब, मैं एक त्रिगुट आपरेशन उपयोग करने के लिए ऐसा करना चाहते हैं, लेकिन सभी उदाहरण मैं भर में आया था के लिए करता है, तो/किसी और जो की तरह कुछ हो जाएगा :

$my_string .= ($append == 'do') ? ' there' : ''; 

तो क्या यह केवल आईएफ और बिना किसी के साथ करना संभव है?

धन्यवाद।

+4

क्या आप बस किसी और के लिए रिक्त स्ट्रिंग को संयोजित नहीं कर सकते? – Claudiu

+1

क्या यह सिर्फ एक अभिव्यक्ति का उपयोग करना ठीक है जो कम जटिल है, उदा। टर्नरी ऑपरेटर का उपयोग नहीं कर रहा है, लेकिन सिर्फ एक तार्किक है? – hakre

+0

आज़माएं यदि (शर्त) सत्य वापस आती है; –

उत्तर

17

नहीं ... त्रिगुट तीन भागों आप शर्त, सच हिस्सा है, और झूठे हिस्सा

22

नहीं की जरूरत का मतलब है। हालांकि, विपरीत संभव है। यहां PHP दस्तावेज़ों का उद्धरण दिया गया है:

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

http://php.net/manual/en/language.operators.comparison.php

4

आप ऐसा कर सकते हैं:

($append == 'do') ? $my_string .= ' there' : $noop ; 

आप बयान को उलटने हैं ताकि त्रिगुट काम के अंदर के बजाय बाहर की दुनिया में है, तो आप एक पूरे डाल सकते हैं सही भाग में बयान, तो बस कुछ ऐसा करें जो ईएलएसई भाग में एक ऑपरेशन कमांड है।

11

संयोजन mellamokb और Andz आप यह कर सकते हैं:

($append != 'do') ?: $my_string .= ' there'; 
+2

+1 यह कहने जा रहा था, लेकिन विचारधारा पर इसका सही ढंग से परीक्षण नहीं कर सका :(ऐसा लगता है कि यह सीमा रेखा को अपठनीय हो रहा है और मैं इसकी अनुशंसा नहीं करता। – mellamokb

+0

यह बेकार है, यह गलत ऑपरेटर है। 'OR' या '|| ', लेकिन नहीं'?' – hakre

1

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

function doAppend($doIt, &$value, $appendValue) 
{ 
    if($doIt) $value .= $appendValue; 
} 

इसके साथ कॉल:

doAppend($append == 'do', $my_string, ' there'); 

नोट कैसे दूसरा पैरामीटर, संदर्भ के द्वारा होता है तो यह बुला कोड में भी बदल जाएगा।

4

एक वैकल्पिक तरीका एक शर्त के लिए जाँच करने के लिए और फिर स्ट्रिंग को संलग्न होगा:

($append == 'do') and ($my_string .= ' there'); 

लेकिन वह वास्तव में सिर्फ एक if विस्थापन तो है। लेकिन किसी और के बिना "टर्नरी" के करीब आता है।

+0

ब्रैकेट की कोई ज़रूरत नहीं है। – hakre

+0

@hakre: मूल रूप से इसके बिना था। लेकिन मैंने देखा कि अक्सर स्पष्टीकरण के लिए बेहतर समझा जाता है। – mario

+0

हाँ मैं जल्द ही परेशान था क्योंकि मैंने उन पर ठोकर खाई थी। हालांकि, यह चीजों को पढ़ने में आसान बना सकता है, वास्तव में। व्हाइटस्पेस की तरह जो भी गिराया जा सकता है लेकिन कम से कम नहीं, कोई भी नहीं करेगा। – hakre

3

यदि आप कोड को छोटा बनाने के लिए विचार कर रहे हैं तो आप एक ही चीज़ को एक ही पंक्ति में लिख सकते हैं।

if ($append == 'do') {$my_string .= ' there';} 

संपादित

मैं सिर्फ यह खोज की थी और काम में आ सोचा। आप भी इस

if ($append == 'do') $my_string .= ' there'; 
0

की तरह अगर ब्लॉक आपसे किसी और/गलत हिस्सा बिना त्रिगुट उपयोग नहीं कर सकते लिख सकते हैं, लेकिन मैं इस विकल्प की कोशिश करने के लिए सुझाव सकता है अगर उद्देश्य एक पंक्ति में सब कुछ करने के लिए है:

($append == 'do' && $my_string .= ' there'); 

यदि पहला सत्य है तो यह दूसरे कथन के साथ आगे बढ़ेगा। अन्यथा झूठे परिणामस्वरूप पहले मूल्यांकन के बाद ही रुक जाएगा।

(ताकि Short-circuit evaluation कहा जाता है)

आलसी मूल्यांकन का संदर्भ लें या फिर आप के सामने कर सकते हैं, सचअगर हिस्सा खाली छोड़ रहा है, और सिर्फ झूठी घोषित, के रूप में Andz सही ढंग से करने के लिए कहते हैं।

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