2012-12-31 15 views
5

extract(some_function_that_returns_array());क्यों निकालें() कार्यों के साथ काम करता है?

ठीक काम करता है।

लेकिन php.net पर यह कहता है कि पहला पैरामीटर एक संदर्भित चर होना चाहिए: http://php.net/manual/en/function.extract.php। क्या यह एक गलती है?


तो

function foo(&$array){} 

function lol(){ $arr = array(); return $arr; } 

foo(lol()); 

पता चलता है:

कि निकालने के साथ

+0

कृपया इसे एक बग पर विचार करें और इसकी रिपोर्ट करें। एक संबंधित बग हो सकता है: https://bugs.php.net/bug.php?id=55222 एक संबंधित प्रश्न हो सकता है: http://stackoverflow.com/q/6726589/367456 – hakre

+0

अच्छी तरह से मुझे वास्तव में परवाह नहीं है इसके बारे में, लेकिन यह दिखाता है कि मैन्युअल पर भरोसा नहीं किया जा सकता है: पी क्या होगा अगर 'मरने()' हमें स्क्रिप्ट के बजाय मारता है? :( – thelolcat

+0

लोलकैली, इसे आसान बनाएं। आप हमेशा दस्तावेज़ों पर भरोसा नहीं कर सकते हैं। जो भी भरोसेमंद मतलब है बीटीडब्ल्यू, मुझे लगता है कि यह छोटी गड़बड़ी आपको मार नहीं रही है, है ना? और अगर आपको परवाह नहीं है, तो कृपया मत पूछें – hakre

उत्तर

1

या तो प्रलेखन है नहीं होता है "सख्त मानकों केवल चर में ... संदर्भ द्वारा पारित किया जाना चाहिए" त्रुटि में या फ़ंक्शन त्रुटि में है। ईमानदारी से, मैं किसी भी कारण से नहीं देख सकता कि क्यों निकालने के संदर्भ में एक सरणी पारित करने की आवश्यकता होगी, लेकिन किसी ने EXTR_REFS निकालने के प्रकार ध्वज को इंगित किया।

PHP कोड (5.3.2) के मेरे स्थानीय सत्यापन को देखते हुए, मैं देख सकता हूं कि extract() के लिए फ़ंक्शन परिभाषा संदर्भ द्वारा पास इंगित नहीं करती है।

function extract (array $var_array, $extract_type = null, $prefix = null) 

sort() को देखते हुए परिभाषा संदर्भ द्वारा शो पास करता है:

function sort (array &$array, $sort_flags = null) 

यही कारण है कि मैं extract() पर सख्त त्रुटि नहीं मिलता है और मैं इसे sort() पर देखते हैं।

मुझे लगता है कि php.net पर प्रलेखन पुराना है या सिर्फ सादा गलत है। extract() एक पुराना पिल्ला है ... मुझे यकीन नहीं है कि जिस दिन फ़ंक्शन परिभाषा वास्तव में &$var_array इंगित करती है या नहीं।

दूसरा विकल्प फ़ंक्शन परिभाषा किसी बिंदु पर गड़बड़ हो गई है और दस्तावेज सही ढंग से इंगित करता है कि यह कैसे होना चाहिए, EXTR_REFS का एक अतिरिक्त प्रकार का झंडा होने पर यह मामला हो सकता है (यह स्थिर अभी भी मौजूद है)।

+1

यह गलत है। सिर्फ इसलिए कि कॉल-टाइम पास-बाय-रेफरेंस 5.3 में बहिष्कृत किया गया था और 5.4 में हटाया गया इसका मतलब यह नहीं है कि अब आप संदर्भ द्वारा वर्र्स पास नहीं कर सकते हैं। ओपी के सवाल से पूरी तरह से असंबंधित। – igorw

+0

@igorw यह सही है। संदर्भ द्वारा पास करना फ़ंक्शन की परिभाषा द्वारा प्राप्त किया जाता है, जब आप फ़ंक्शन को कॉल करते हैं तो निर्दिष्ट नहीं किया जाता है। – Ray

+1

इस उत्तर के पास इस प्रश्न के साथ कुछ लेना देना नहीं है। ओपी कॉल-टाइम के बारे में बिल्कुल नहीं पूछ रहा है। – webbiedave

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