2012-11-22 27 views
5

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

वहाँ कोड निम्न चर का डिफ़ॉल्ट मान सेट करने के लिए की तुलना में किसी भी बेहतर या अधिक संक्षिप्त तरीका है?

$v = isset($v) ? $v : "default value"; 

उत्तर

2

यहाँ एक छोटा वाक्य रचना है हो सकता है:

isset($v) || $v="default value"; 
0

नहीं। यह सही तरीका है यदि आप वास्तव में नहीं जानते कि $v सेट है या नहीं।

0

कोई रास्ता नहीं। अगर आप टर्नरी ऑपरेटर का उपयोग करते हैं।

6

टीएल; डीआर - नहीं, उस अभिव्यक्ति को कोई छोटा नहीं बनाया जा सकता है।

आप जो चाहते हैं वह संक्षिप्त टर्नरी अभिव्यक्ति के लिए एक अंतर्निहित isset() निष्पादित करने के लिए है। इस पर mailing list पर चर्चा की गई है और ifsetor RFC बनाया गया है जो अवधारणा को भी शामिल करता है।

// PROPOSAL ONLY, DOES NOT WORK 
$v = $v ?? 'default value'; 

असाइन 'default value' अगर $v अपरिभाषित है:

के बाद से छोटा त्रिगुट ऑपरेटर पहले से ही उपरोक्त चर्चा के समय में ही अस्तित्व में, कुछ इस तरह proposed किसी गैर-मौजूद ऑपरेटर ?? का उपयोग कर रहा था।

हालांकि, इस तरह से कुछ भी मुख्य भाषा में आज तक लागू नहीं किया गया है। तब तक, जो आपने लिखा है उसे कम नहीं किया जा सकता है।

यह भयानक निर्माण में कम है, लेकिन ध्यान दें कि यह नहीं एक ही क्योंकि यह डिफ़ॉल्ट मान प्रदान करती है, तो चर मौजूद है, लेकिन मूल्यांकन करता false रहे हैं:

// DO NOT USE 
$v = @$v ?: 'default value'; 
+1

क्या होगा यदि '$ v' पहले से ही सेट किया गया है और यह' है '' ' या '0' या' शून्य 'या' झूठी'? – Carlos

+1

मैं देखता हूं। लेकिन मुझे नहीं लगता कि यह एक अच्छा दृष्टिकोण है ... – Carlos

+1

@jackflash इसलिए मेरा "भयानक निर्माण" का उल्लेख –

2

बस this पूछा और यहाँ बताया गया । तो मामले में आप एक array के key उपयोग करते हैं, यह एक सुधार

function isset_get($array, $key, $default = null) { 
    return isset($array[$key]) ? $array[$key] : $default; 
}