2012-04-09 7 views
5

मैं संभावित रूप से अपरिभाषित चर से निपटने के लिए शॉर्टकट के रूप में संदर्भ असाइनमेंट का उपयोग करने के बारे में सोच रहा हूं।संभावित रूप से अपरिभाषित चरों को संभालने के दौरान PHP में संदर्भ असाइनमेंट का उपयोग करना बुरा व्यवहार है?

दूसरे शब्दों में, के बजाय:

$foo = &$this->blah['something']['else']; 
if (!is_null($foo) && ...){ 
    //do something with $foo 
} 

, सरल लगता है सही:

$foo = isset($this->blah['something']['else']) ? $this->blah['something']['else'] : null; 
if (!is_null($foo) && ...){ 
    //do something with $foo 
} 

मैं यह कर सकता है? जिस तरह से PHP संदर्भ द्वारा असाइनमेंट को संभालता है, मुझे इस बारे में चिंता करने की ज़रूरत नहीं है-> ब्लाह ['कुछ'] ['else'] परिभाषित किया जा रहा है, क्योंकि यदि यह अस्तित्व में नहीं है तो यह स्वचालित रूप से बनाया जाएगा और सेट हो जाएगा नल के लिए।

क्या यह रणनीति इस पर भरोसा है?

+0

मैं कहना चाहता हूँ यह बुरा व्यवहार किया गया था। मैं दूसरे ऑपरेटर को संदर्भ ऑपरेटर की परवाह किए बिना नोटिस बढ़ाने की उम्मीद करता हूं, और जहां भी संभव हो, नोटिस को स्क्वैश किया जाना चाहिए। – halfer

+0

सही, दूसरे फॉर्म को छोड़कर नोटिस नहीं उठाएगा! PHP असाइनमेंट-बाय-रेफरेंस उस तरह मुश्किल है। –

+0

पहले भाग में, आप जानबूझकर त्रुटि नोटिस को दबाने के लिए '@' ऑपरेटर का उपयोग करने पर विचार क्यों नहीं करते? – hohner

उत्तर

0

तुम सिर्फ अगर एक चर सेट किया गया है और रिक्त नहीं परीक्षण करना चाहते हैं, तो आप बेहतर परीक्षण:

if (! empty($this->blah['something']['else'])) {...} 

इस तरह आप भी है कि नहीं रह सकता एक मूल्य के लिए दो संदर्भ बनाने से बचें।

मेरी राय में, हर बार जब आप एक ही मूल्य के लिए एक नया संदर्भ बनाते हैं, तो आपका कोड एक नज़र में समझना मुश्किल हो जाता है।

आप शून्य के रूप में गैर खाली की जरूरत है, तो आप बेहतर एक वैश्विक समारोह इस प्रकार बना:

function eempty(& $var) { 
    return empty($var) && $var !== 0; 
} 
+0

आप कुछ अच्छे अंक बनाते हैं लेकिन आपका पहला उदाहरण गलत है ... एक अविकसित चर पर खाली() को कॉल करना एक चेतावनी फेंक देगा, मुझे विश्वास है। –

+0

जैसा कि PHP प्रलेखन में बताया गया है: "खाली() (बुलियन) var के विपरीत है, सिवाय इसके कि जब कोई चर सेट नहीं होता है तो कोई चेतावनी उत्पन्न नहीं होती है"। देखें http://www.php.net/manual/en/function.empty.php –

+1

मैं सही खड़ा हूं! जानकार अच्छा लगा। –

0

मुझे व्यक्तिगत रूप से लगता है कि यह अधिक पारंपरिक हो सकता है, लेकिन इस तरह के एक निर्दिष्ट मूल्य को असाइन करना मेरे लिए थोड़ा अनावश्यक लगता है। मैं बस अपनी स्थिति में अधिक सामान्य रूप से इस्तेमाल किए जाने वाले टर्नरी ऑपरेटर के साथ रहूंगा। अक्सर यह समझने के लिए बहुत स्पष्ट है। बेशक, आपको जितना संभव हो सके अपने व्यक्तिगत अर्थशास्त्र का पालन करना चाहिए।