2011-12-20 16 views
5

मैं PHP के त्रिगुट ऑपरेटर के साथ इस मुद्दे हो रहा है के साथ परिणाम अवांछित है, पीएचपी 5.3 संस्करण के बाद से आपनई शैली पीएचपी त्रिगुट ऑपरेटर isset समारोह

// Older version 
$route = isset($test) ? $test : 'test is NOT set'; 


// Newer version as of 5.3 
$route = isset($test) ?: 'test is NOT set'; 

अब पर एक और भी छोटा संस्करण के साथ आशुलिपि त्रिगुट ऑपरेटर बदलने के लिए कर सकते हैं नया संस्करण, यदि $test सेट नहीं है। यह बढ़िया काम करता है। हालांकि जब यह isset() विधि के कारण सेट किया गया है, तो यह मूल्य के बजाय true या 1 लौटा रहा है।

मैं बड़ा अब विधि का उपयोग करने 1 की एक बूलियन मान के बजाय $test के मूल्य के बराबर करने के लिए $route प्राप्त करने के लिए है?

+0

आप '$ रूट = $ परीक्षण का उपयोग कर सकते हैं?: 'परीक्षण सेट नहीं है'; 'इसके बजाय। – FtDRbwLXw6

+1

यदि आपको त्रुटि संदेशों को दबाने में कोई फर्क नहीं पड़ता है तो भी आप शॉर्टंड का उपयोग कर सकते हैं। यह करने के लिए 'सही' या 'सुंदर' तरीका नहीं है, लेकिन अभी भी काम करता है - $ रूट = @ $ परीक्षण?: 'परीक्षण सेट नहीं है'; –

उत्तर

9

आपको लंबे संस्करण का उपयोग करना होगा।

अभिव्यक्ति expr1:

docs का हवाला देते हुए? Expr3 रिटर्न expr1 अगर expr1 सही पर मूल्यांकन करता है, और expr3 अन्यथा।

तो आपके शॉर्टेंड संस्करण के लिए सही व्यवहार isset($test) का मूल्यांकन करने के परिणाम को वापस करना है। जैसा कि आप चाहते हैं $test का नहीं।

1

से शुरू पीएचपी 7, आप अशक्त कोलेसिंग ऑपरेटर का उपयोग कर सकते:

$route = isset($test) ? $test : 'test is NOT set'; 

Here को

$route = $test ?? 'test is NOT set'; 

जो के बराबर है आप कुछ जानकारी प्राप्त कर सकते:

शून्य कोलेसेसिंग ऑपरेटर (??) isset() के साथ संयोजन में टर्नरी का उपयोग करने की आवश्यकता के सामान्य मामले के लिए सिंटैक्टिक चीनी के रूप में जोड़ा गया है। यदि यह अस्तित्व में है और यह पूर्ण नहीं है तो यह अपना पहला ऑपरेंड देता है; अन्यथा यह अपना दूसरा ऑपरेंड देता है।

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