2012-09-19 15 views
7

जब मैं $GLOBALS इस कोड का उपयोग प्रिंट:

Array ([_GET] => Array () [_POST] => Array () [_COOKIE] => Array () [_FILES] => Array () [GLOBALS] => Array *RECURSION*)

क्या *RECURSION* इस मामले में क्या मतलब है, और क्यों $_SERVER, $_REQUEST, आदि मुद्रित नहीं कर रहे हैं:

<?php print_r($GLOBALS); ?> 

मैं इस आउटपुट प्राप्त भी?

उत्तर

4

this part of PHP Manual देखें:

ध्यान रखें कि $ के वैश्विक, है ही, एक वैश्विक चर। तो इस तरह से कोड काम करेंगे नहीं:

<?php 
    print '$GLOBALS = ' . var_export($GLOBALS, true) . "\n"; 
?> 

यह त्रुटि संदेश में परिणाम है: "नेस्टिंग स्तर बहुत गहरा - पुनरावर्ती निर्भरता"

आपने पहले ही पूरी सूची पुनर्प्राप्त कर ली है - आप बस इसका हिस्सा प्रदर्शित नहीं कर सकते हैं (जिसमें एक रिकर्सन है, क्योंकि आपके पास सार्थक कुछ भी नहीं है)।

यह $_REQUEST की बात आती है, यह $_GET, $_POST और $_COOKIE से व्युत्पन्न है, इसलिए इसकी सामग्री अनावश्यक है।

संपादित: वहाँ है an old bug/feature, कि $_SERVER और $_REQUEST साथ $GLOBALS पॉप्युलेट करने के दौरान पहुँचा रहे हैं। तो $_REQUEST तक पहुंचने का प्रयास करें और उम्मीद है कि इससे मदद मिलती है। वैसे भी, यह $GLOBALS में पाया जा सकता है: ideone.com/CGetH

+0

मैंने पहले से ही उस हिस्से को देखा .. मेरा सवाल यह है कि कम से कम एक ही रन में _POST आदि के लिए इसका आउटपुट करने पर इसे $ _REQUEST, $ _SERVER प्रकाशित करना पड़ सकता है? भी – swapnesh

+0

@swapnesh: [पुरानी बग/फीचर] है (https://bugs.php.net/bug.php?आईडी = 2 9 176), जो कि '$ _SERVER'' और '$ _REQUEST' के साथ पहुंचने पर' $ GLOBALS 'को पॉप्युलेट कर रहा है। तो '$ _REQUEST' तक पहुंचने का प्रयास करें और उम्मीद है कि इससे मदद मिलती है। वैसे भी, यह उसके बाद '$ GLOBALS' में पाया जा सकता है: http://ideone.com/CGetH – Tadeck

+0

इसे अपने उत्तर में जोड़ें और फिर मैं इसे ccaept करूँगा .. जानकारी के लिए thx :) – swapnesh

0

जब आपके पास ऑब्जेक्ट इंगित करने वाला ऑब्जेक्ट होता है ... यानी यह केवल मंडलियों में जाएगा।

+0

2,3 बिंदु के बारे में क्या है :) – swapnesh

2

$GLOBALS स्वयं को एक सरणी के रूप में शामिल करता है। the PHP reference में आप $GLOBALS की परिभाषा पा सकते हैं:

एक साहचर्य सरणी सभी चर जो वर्तमान में स्क्रिप्ट के वैश्विक दायरे में परिभाषित कर रहे हैं के संदर्भों वाले। परिवर्तनीय नाम सरणी की चाबियाँ हैं।

इसलिए, इसमें स्वयं भी शामिल होना चाहिए, जो एक रिकर्सन की ओर जाता है।

अन्य सरणी शायद खाली हैं, क्योंकि आपकी स्क्रिप्ट में और कुछ भी नहीं हुआ है।

रिकर्सन के बारे में एक पुराना मजाक है: "रिकर्सन को समझने के लिए, आपको रिकर्सन को समझना चाहिए"।

बीटीडब्ल्यू: यह मेरे कंप्यूटर पर _SERVER आउटपुट करता है।

+1

पुराने मजाक के लिए +1 :) – swapnesh

+1

हा ... मैंने अभी पाया है कि PHP स्वयं एक रिकर्सिव शब्दकोष है, क्योंकि यह PHP हाइपरटेक्स्ट प्रीप्रोसेसर के लिए खड़ा है ... पहले कभी नहीं देखा गया। विकिपीडिया प्रभाव से मिला :-) http://xkcd.com/214/ – ChaosCakeCoder

+0

हाँ एक और आकर्षक लिंक के लिए इतना सच और thx :) – swapnesh

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