2015-07-07 11 views
5

मैं अपने कोड में कहीं पीछा का उपयोग करें:त्रिगुट ऑपरेटर

if (isset($flat[$pid])) { 
    $branch = &$flat[$pid]['items']; 
} else { 
    $branch = &$tree; 
}  

सभी ठीक है, लेकिन जब मैं करने के लिए कम यह करना चाहते हैं:

$branch = isset($flat[$pid]) ? &$flat[$pid]['items'] : &$tree; 

मैं:

वाक्यविन्यास त्रुटि, अप्रत्याशित '&' ...

मैं क्या गलत कर रहा हूँ?

+5

http://stackoverflow.com/questions/338 9928/कैन-यू-पास-बाय-रेफरेंस-जबकि-टर्नरी-ऑपरेटर – Mihai

उत्तर

8

ऐसा इसलिए है क्योंकि ternary operator एक अभिव्यक्ति है, इसलिए यह एक चर का मूल्यांकन नहीं करता है। और मैनुअल से एक उद्धरण:

नोट: कृपया ध्यान दें कि त्रिगुट ऑपरेटर एक अभिव्यक्ति है, और यह एक चर का मूल्यांकन नहीं है कि है, लेकिन एक अभिव्यक्ति का परिणाम है। यह जानना महत्वपूर्ण है कि क्या आप संदर्भ द्वारा एक चर वापस करना चाहते हैं। बयान $ var == 42 लौटाता है? $ ए: $ बी; एक रिटर्न-बाय-रेफरेंस फ़ंक्शन में काम नहीं करेगा और बाद के PHP संस्करणों में एक चेतावनी जारी की जाएगी।

1

इस विकल्प के रूप में काम करेंगे,

(isset($flat[$pid])) ? ($branch = &$flat[$pid]['items']) : ($branch = &$tree); 

संपादित करें:

कम से कम यह दो पंक्तियों हो जाएगा जा सकते हैं

,

@$temp = &$flat[$pid]['items']; 
$branch = &${isset($flat[$pid]) ? "temp" : "tree"}; 
+1

बहुत क्रिप्ट :) मैं इस मामले में 'अगर' खंड पसंद करता हूं। –

+0

हां, वास्तव में यह है, मैंने अपना जवाब संपादित किया। यह आपको रूचि दे सकता है :) – Viral

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