सेट कर दिया जाता असाइन करता है, तो PHP में मैं अपने आप को यह बार-बार की तरह कोड लिखने लगता है? अधिमानतः एक जिसे मुझे $the->very->long->variable[$index]
लिखने की आवश्यकता नहीं है।चर
चर
उत्तर
दुख की बात नहीं, क्योंकि RFC अस्वीकार कर दिया गया है। और क्योंकि isset एक फ़ंक्शन नहीं है लेकिन एक भाषा निर्माण है, आप इस मामले के लिए अपना स्वयं का फ़ंक्शन नहीं लिख सकते हैं।
नोट: क्योंकि यह एक भाषा निर्माण है और फ़ंक्शन नहीं है, इसे चर कार्यों का उपयोग करके नहीं कहा जा सकता है।
वास्तव में दुखद। लेकिन उत्तर के लिए धन्यवाद। – oz1cz
मान लिया जाये कि आप जानते हैं कि $the->very->long->variable
सेट किया गया है, और तुम सिर्फ सरणी सूचकांक बारे में चिंतित हैं ....
$x = $the->very->long->variable;
$a = isset($x[$index]) ? $x[$index] : null;
या एक अधिक सामान्य संस्करण है कि आप कोड के आसपास का उपयोग कर सकते के लिए:
function array_valifset($arr,$k, $default=null) {
return isset($arr[$k]) ? $arr[$k] : $default;
}
तो किसी भी सरणी मूल्य के लिए इस तरह इसे कहते:
$a = array_valifset($the->very->long->variable,$index);
मैं एक ही समस्या में ठोकर खाई और पाया कि एक सरणी तत्व का संदर्भ देने से नोटिस या चेतावनी जारी नहीं होती है लेकिन शून्य (कम से कम PHP 5.6) लौटाती है।
$foo = ['bar' => 1];
var_dump($bar = &$foo['bar']); // int 1
var_dump($baz = &$foo['baz']); // null
एक के अंदर अगर बयान:
if($bar = &$foo['bar']) {
echo $bar;
}
if($baz = &$foo['baz']) {
echo $baz;
}
एक अद्यतन, क्योंकि पीएचपी 7 अब बाहर है और इस मुद्दे पर एक खेल परिवर्तक है; पिछले उत्तर PHP 5 के बारे में हैं।
PHP 7 इस समस्या को हल करता है। क्योंकि आप यह कहकर सच हैं कि PHP में इसे लिखना अक्सर होता है, और यह बिल्कुल सुरुचिपूर्ण नहीं है।
PHP 7 में Null Coalesce Operator (RFC) आता है, जो जारीकर्ता टर्नरी स्थिति के लिए एक आदर्श शॉर्टेंड है।
$var = isset($dict['optional']) ? $dict['optional'] : 'fallback';
कि द्वारा::
$var = $dict['optional'] ?? 'fallback';
और भी बेहतर, अशक्त सम्मिलित ऑपरेटरों chainable हैं:
$x = null;
# $y = null; (undefined)
$z = 'fallback';
# PHP 7
echo $x ?? $y ?? $z #=> "fallback"
# PHP 5
echo isset($x) ? $x : (isset($y) ? $y : $z)
अशक्त
इसका लक्ष्य हालत के इस प्रकार को बदलने के लिए है coalesce ऑपरेटर बिल्कुल isset()
की तरह कार्य करता है: विषय चर का मूल्य लिया जाता है यदि:
- चर परिभाषित किया गया है (वह मौजूद है)
- चर अशक्त
बस एक PHP शुरुआती के लिए टिप्पणी नहीं है: यदि आप त्रिगुट शर्त का उपयोग, लेकिन आपको पता है कि इस विषय चर जरूरी परिभाषित किया गया है (लेकिन आप falsy मूल्यों के लिए फ़ॉलबैक चाहते हैं), वहाँ Elvis operator है:
$var = $dict['optional'] ?: 'fallback';
एल्विस ऑपरेटर के साथ, यदि $dict['optional']
गलत ऑफसेट है या $dict
अपरिभाषित है, तो आप एक E_NOTICE
मिलेगा चेतावनी (PHP 5 & 7)। यही कारण है कि, PHP 5 में, लोग भयानक जारी कर रहे हैं? ए: बी फॉर्म जब वे इनपुट के बारे में निश्चित नहीं हैं।
अच्छा काम @ मॉर्गन इसे एक नए उत्तर के साथ अपडेट कर रहा है! धन्यवाद। –
आप केवल गैर सेट चर के null
आवंटित बजाय हैं, तो आप उपयोग कर सकते हैं:
$a = @$the->very->long->variable[$index];
@
करता है कि शिक्षा कोई त्रुटि
फेंक काम कर OOP करके और __get का उपयोग करें और __set? –
@DaHaKa: यह अच्छी सेटिंग्स वाले किसी सर्वर पर चेतावनी जारी कर सकता है ('E_STRICT | E_ALL)' –
यदि आप एक ही लंबे परिवर्तनीय का उपयोग कर रहे हैं तो आप संदर्भ का उपयोग कर सकते हैं: '$ ref = $ the-> very-> लंबे समय> चर; $ ए =! खाली ($ रेफरी [$ इंडेक्स])? $ रेफरी [$ इंडेक्स]: शून्य; $ बी =! खाली ($ रेफरी [++ $ इंडेक्स]) ... ', या @ बॉन्डेई ने बताया, जादू गेटर विधि का उपयोग करें, और इसे _either_ शून्य या संपत्ति मान –