चर

2012-11-29 5 views
18

सेट कर दिया जाता असाइन करता है, तो PHP में मैं अपने आप को यह बार-बार की तरह कोड लिखने लगता है? अधिमानतः एक जिसे मुझे $the->very->long->variable[$index] लिखने की आवश्यकता नहीं है।चर

+0

फेंक काम कर OOP करके और __get का उपयोग करें और __set? –

+0

@DaHaKa: यह अच्छी सेटिंग्स वाले किसी सर्वर पर चेतावनी जारी कर सकता है ('E_STRICT | E_ALL)' –

+0

यदि आप एक ही लंबे परिवर्तनीय का उपयोग कर रहे हैं तो आप संदर्भ का उपयोग कर सकते हैं: '$ ref = $ the-> very-> लंबे समय> चर; $ ए =! खाली ($ रेफरी [$ इंडेक्स])? $ रेफरी [$ इंडेक्स]: शून्य; $ बी =! खाली ($ रेफरी [++ $ इंडेक्स]) ... ', या @ बॉन्डेई ने बताया, जादू गेटर विधि का उपयोग करें, और इसे _either_ शून्य या संपत्ति मान –

उत्तर

10

दुख की बात नहीं, क्योंकि RFC अस्वीकार कर दिया गया है। और क्योंकि isset एक फ़ंक्शन नहीं है लेकिन एक भाषा निर्माण है, आप इस मामले के लिए अपना स्वयं का फ़ंक्शन नहीं लिख सकते हैं।

नोट: क्योंकि यह एक भाषा निर्माण है और फ़ंक्शन नहीं है, इसे चर कार्यों का उपयोग करके नहीं कहा जा सकता है।

+1

वास्तव में दुखद। लेकिन उत्तर के लिए धन्यवाद। – oz1cz

1

मान लिया जाये कि आप जानते हैं कि $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); 
+0

धन्यवाद। मैं उम्मीद कर रहा था कि मैंने केवल एक अंतर्निहित सुविधा को अनदेखा कर दिया था। जाहिर है कि यह मामला नहीं है। – oz1cz

+0

नहीं। जैसा कि @ ईसबर्ग कहते हैं, PHP देवताओं ने स्पष्ट रूप से एक शॉर्टेंड जारी करने के समाधान को खारिज कर दिया है। :-(मुझे यकीन है कि उनके कारण हैं। – SDC

-1

मैं एक ही समस्या में ठोकर खाई और पाया कि एक सरणी तत्व का संदर्भ देने से नोटिस या चेतावनी जारी नहीं होती है लेकिन शून्य (कम से कम 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; 
} 
23

एक अद्यतन, क्योंकि पीएचपी 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 में, लोग भयानक जारी कर रहे हैं? ए: बी फॉर्म जब वे इनपुट के बारे में निश्चित नहीं हैं।

+0

अच्छा काम @ मॉर्गन इसे एक नए उत्तर के साथ अपडेट कर रहा है! धन्यवाद। –

0

आप केवल गैर सेट चर के null आवंटित बजाय हैं, तो आप उपयोग कर सकते हैं:

$a = @$the->very->long->variable[$index];

@ करता है कि शिक्षा कोई त्रुटि