2011-08-16 15 views
22

मैं सिर्फ देखा पीएचपी (unset) करने के लिए एक प्रकार कास्टिंग है, और मैं सोच रहा हूँ क्या यह संभवतः के लिए इस्तेमाल किया जा सकता है। यह वास्तव में वैरिएबल को भी अनसेट नहीं करता है, यह सिर्फ इसे NULL पर रखता है, जिसका अर्थ है कि (unset)$anything बिल्कुल NULL लिखने जैसा ही होना चाहिए।किसी ने कभी भी PHP (अनसेट) कास्टिंग का उपयोग किया है?

# Really unsetting the variable results in a notice when accessing it 
[email protected]:~$ php -r '$foo = 123; unset($foo); echo $foo;' 
PHP Notice: Undefined variable: foo in Command line code on line 1 
PHP Stack trace: 
PHP 1. {main}() Command line code:0 

# (unset) just set it to NULL, and it doesn't result in a notice 
n[email protected]:~$ php -r '$foo = 123; $foo=(unset)$foo; echo $foo;' 

किसी ने कभी भी इसे किसी भी चीज़ के लिए उपयोग किया है? मैं इसके लिए किसी भी संभावित उपयोग के बारे में सोच सकते नहीं ...

जोड़ा गया:
सवाल का मुख्य विचार है:
के बजाय सिर्फ NULL(unset)$smth उपयोग करने के लिए कारण क्या है?

उत्तर

14

जहां तक ​​मेरा बता सकते हैं, वहाँ वास्तव में का उपयोग कर

$x = (unset)$y; 

से अधिक
$x = NULL; 

(unset)$y हमेशा अशक्त का मूल्यांकन करने के लिए कोई मतलब नहीं है, और unset($y) बुला के विपरीत, डाली नहीं है $y को बिल्कुल प्रभावित करें।

फर्क सिर्फ इतना है कि कलाकारों का उपयोग कर अभी भी एक "अनिर्धारित चर" नोटिस उत्पन्न होगा अगर $y परिभाषित नहीं है।

कोई संबंधित समस्या के बारे में PHP bug नहीं है। बग वास्तव में दस्तावेज में कहीं और भ्रामक मार्ग के बारे में है जो कहता है:

एक चर को शून्य पर कास्ट करने से चर को हटा दिया जाएगा और इसके मूल्य को अनसेट कर दिया जाएगा।

और वह स्पष्ट रूप से मामला नहीं है।

+0

अच्छा लगता है कि नोटिस पीढ़ी। उस संभावना के लिए, यह वास्तव में कुछ स्थानों में बहुत उपयोगी हो सकता है। – Smar

+0

मैं PHP में पूरी तरह से बेकार विशेषता देखने के लिए आश्चर्यचकित हूं ... मुझे आश्चर्य है कि वे इसे जोड़ने के दौरान क्या सोच रहे थे। मैंने सोचा कि मुझे कुछ याद आ रहा है ...लेकिन मुझे लगता है कि यह सभी – shesek

+0

के बाद पूरी तरह से बेकार है नोटिस व्यवहार दरवाजा खुलता है, कहता है कि एक चर को अपरिभाषित किया गया है, भले ही आपको इसके मूल्य की परवाह न हो। मेरे सिर के ऊपर से मैं वास्तव में उस क्षमता के लिए उपयोग मामले के साथ नहीं आ सकता, हालांकि। एकमात्र अन्य चीज जो मैं सोच सकता हूं वह यह है कि इसे शून्य के साथ एक मूल्य को प्रतिस्थापित करने के लिए "शॉर्टंड" संपादन के प्रकार के रूप में उपयोग किया जा सकता है लेकिन अभी भी उस स्थान के मूल्य के कोड में कुछ धारणा है। –

6

मुझे लगता है कि चाहते हैं (पीएचपी जानने और यह notaribly है ... विभिन्न चीजों के लिए दिलचस्प विकल्प, मैं पूरी तरह से गलत हो सकता है) ताकि मूल्य एक वर के लिए सेटिंग की जरूरत नहीं है यह है कि। सही कारण एक कोड के लिए उपयोग करने के लिए, मैं एक उदाहरण के बारे में सोच नहीं सकते हैं, लेकिन कुछ इस तरह:

$foo = bar((unset) baz()); 

वहाँ आप चाहते हैं या बार के लिए तर्क के रूप में अशक्त करने की जरूरत है और अभी भी baz() भी फोन करने की जरूरत है । फ़ंक्शन का सिंटैक्स बदल गया है और किसी ने डक टेप फिक्स किया है, जैसा कि PHP के साथ गर्म लगता है।

तो मैं कहेंगे: यह अच्छी तरह से सोचा था कि वास्तुकला में उपयोग करने के लिए कोई कारण नहीं है; उन समाधानों के लिए इस्तेमाल किया जा सकता है जो इतने अस्पष्ट हैं कि मैं उनके खिलाफ पहले स्थान पर वोट दूंगा।

+3

मुझे नहीं पता कि आप इस तरह से चेन फ़ंक्शन कॉल क्यों करना चाहते हैं यदि आप हमेशा 'null' से' bar' को पहले स्थान पर पास करना चाहते हैं ... – deceze

1

उदाहरण के लिए यह इस

function fallback() 
{ 
    // some stuff here 
    return 'zoo'; 
} 

var_dump(false ? 'foo' : fallback()); // zoo 
var_dump(false ? 'foo' : (unset) fallback()); // null 

की तरह इस्तेमाल किया जा सकता भले ही fallback() रिटर्न "चिड़ियाघर" (unset) कि मूल्य साफ हो जाएगा।

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