स्वीकार करता है मैंने PHP मैनुअल में कुछ विसंगतियों को देखा है; संदर्भ के द्वारा तर्क स्वीकार करने के लिए कई कोर फ़ंक्शन हस्ताक्षर दस्तावेज किए जाते हैं, हालांकि वे मान द्वारा तर्क स्वीकार करते हैं।PHP कोर फ़ंक्शन तर्क; मैनुअल संदर्भ कहता है, हालांकि यह मान
मैं पहले एक और अधिक specific question तैनात है, और @cweiske एक महान जवाब (उचित पीएचपी स्रोत के संदर्भ में ) प्रदान की तथापि इन विसंगतियों अधिक बड़े पैमाने पर दिखाई देते हैं।
कार्यों है कि इस से प्रभावित हैं की एक संख्या हैं;
- http://www.php.net/manual/en/function.current.php
-
(मैं वारंट के रूप में इस सूची को अपडेट कर देंगे
यह भी ध्यान रखें, इन परीक्षणों एक
- यह पहले से ही जुड़ा हुआ सवाल
error_reporting(-1)
पर्यावरण में किया गया था) - http://www.php.net/manual/en/function.key.php पर चर्चा की गई थी
- यह पहले से ही जुड़ा हुआ सवाल
-
http://www.php.net/manual/en/function.array-replace-recursive.php-
array
array_replace_recursive
( array
&$array
, array
&$array1
[, array
पर चर्चा की गई थी&$
... ] )
- , तर्क
$array
,$array1
, आदि स्वीकार मूल्य द्वारा। इसे ठीक किया गया है।
-
- http://www.php.net/manual/en/function.array-multisort.php
bool
array_multisort
( array
&$arr
[, mixed
$arg
=
SORT_ASC
[, mixed
$arg
=
SORT_REGULAR
[, mixed
$
... ]]] )
- , तर्क
$arr
, आदि स्वीकार मूल्य द्वारा। यह एक त्रुटि फेंकना चाहिए, क्योंकि तर्क एक चर नहीं है, तो यह कुछ भी नहीं करेगा।
अब मेरा सवाल है, इसलिए नहीं कि मैं प्रलेखन के बारे में गुदा जा रहा हूँ, लेकिन क्योंकि मुझे डर है कि पीएचपी devs इन कार्यों के कार्यान्वयन के विवरण के बारे में बाड़ (या कुछ और भी उतना ही अविश्वसनीय पर हैं)
उदाहरण के लिए, मैं array_replace_recursive()
का उपयोग करता हूं, एक सरणी तर्क लेने के लिए, और इसे डिफ़ॉल्ट वाले अन्य सरणी के विरुद्ध लागू करता हूं। मेरी codebase में से कुछ इस विसंगति का लाभ उठाया है, बस करने के लिए:
$values = array_replace_recursive(array(
'setting_1' => array(
'sub-setting_1' => '',
'sub-setting_2' => '',
'sub-setting_3' => '',
),
'setting_2' => array(
'sub-setting_1' => 0,
'sub-setting_2' => 0,
),
'setting_3' => true,
), $values);
इस प्रकार
मैं इस पर विचार करना होगा (करीब नि: शुल्क isset()
कॉल पाने के लिए ) उचित रूप से स्वरूपित सरणी का निर्माण? मैं एक दस्तावेज संबंधी बग अनुरोध सबमिट करने के बारे में सोच रहा हूं, लेकिन अगर मैं SO (आपकी दिशा में देख रहा हूं तो @ cweiske) पर कोई भी व्यक्ति उत्सुक हूं, पर अंतर्दृष्टि है क्यों यह किया गया है।
धन्यवाद @ ब्रायन - मेरा दुविधा, यह मुद्दा इस तथ्य के लिए मंथन नहीं है कि PHP देवताओं ने स्पष्ट रूप से यह दस्तावेज किया होगा क्योंकि क्षितिज में परिवर्तन है। यदि फ़ंक्शन * तर्कों को संशोधित नहीं करता है, तो संदर्भ के अनुसार उन्हें परिभाषित क्यों करें? यदि फ़ंक्शन * तर्कों को संशोधित करता है, तो पास किए गए मान क्यों स्वीकार करते हैं? यदि यह एक दस्तावेज़ीकरण निरीक्षण है, और 5.4 के साथ, सभी संस्करण परिवर्तन/शाखाओं के साथ, (* जैसा आपने बताया है; 5.3, 6.0, आदि *) तो यह पूरी तरह समझ में आता है। हालांकि कार्यान्वयन मूल्यों को पारित करने की अनुमति देता है। यह सही प्रतीत नहीं होता है, और मैं सिर्फ यह जानना चाहता हूं कि क्यों। – Dan
आह मैं देखता हूं कि आप अपनी चिंता के साथ कहां जा रहे हैं, तो यह है कि यदि वे इन कार्यों को संशोधित करने का इरादा रखते हैं तो उन्हें संदर्भ के रूप में अपने पैरामीटर लेने की अनुमति देकर काम करना होगा और कार्य के परिणाम की आवश्यकता के बजाय सीधे उन पर काम करना होगा लौटा हुआ? मैं देख सकता था कि यह एक मुद्दा कैसे हो सकता है: दुर्भाग्यवश मैं ऐसे व्यक्ति भी नहीं हूं जो आम तौर पर PHP के स्रोत में पहुंचे, इसलिए मैं प्रश्न के क्षेत्ररक्षण को यहां पर एक बेवकूफ नरक में से एक में छोड़ दूंगा;) – Brian