विंडोज़ में सभी पर्यावरण चर के मान कैसे प्रदर्शित करें। विंडोज में सभी पर्यावरण चर के मूल्यों को कैसे प्रदर्शित करें स्क्रीन पर एक चर के मूल्य को प्रिंट करना

निश्चित रूप से आपके पास घर पर एक कोठरी या दराज की छाती है। उनके उपयोग का सिद्धांत सरल है: हम वहां ऐसी चीजें डालते हैं जिनकी हमें अभी आवश्यकता नहीं है, लेकिन थोड़ी देर बाद आवश्यकता हो सकती है।

चर बिल्कुल उसी तरह व्यवस्थित होते हैं। आप उनमें कुछ मूल्य डाल सकते हैं और इसे तब तक स्टोर कर सकते हैं जब तक आपको इसकी आवश्यकता न हो।

चर बनाना

आप इस तरह एक चर में एक मान डाल सकते हैं:

ऊपर दिए गए कोड में, हमने $name वेरिएबल बनाया और इसमें इवान वैल्यू डाल दी, फिर हमने $age वेरिएबल बनाया और इसे 20 वैल्यू असाइन की।

"वैरिएबल" नाम का अर्थ है कि स्क्रिप्ट निष्पादन के दौरान इसका मान बदल सकता है:

कुछ भाषाओं में, उपयोग किए जाने से पहले एक चर को पहले "घोषित" किया जाना चाहिए। PHP में कोई घोषणा नहीं है - एक चर तब बनाया जाता है जब आप उसमें एक मान डालते हैं।
हालाँकि, PHP प्रोग्रामर अक्सर "एक चर बनाएँ" के बजाय "एक चर घोषित करें" कहते हैं।

इसके अलावा, "वैरिएबल में वैल्यू डालें" के बजाय इसे अक्सर "वैल्यू असाइन करें" कहा जाता है।
कारण सरल है - प्रतीक = जिसके लिए हम एक चर में मान संग्रहीत करते हैं, इसे "असाइनमेंट ऑपरेटर" कहा जाता है। इसलिए शब्द "असाइन"।

परिवर्तनीय नामकरण सम्मेलन

1. Variable का नाम $ चिन्ह से शुरू होता है।

2. दूसरा वर्ण एक अक्षर या एक अंडरस्कोर हो सकता है _

Variable के नाम केस सेंसिटिव होते हैं। $name और $Name अलग-अलग चर हैं।

स्क्रीन पर एक चर का मान प्रदर्शित करना

आप पहले से ज्ञात इको कमांड का उपयोग करके एक चर प्रदर्शित कर सकते हैं:

इको कमांड आपको एक साथ कई मान प्रदर्शित करने की अनुमति देता है:

ध्यान दें कि हमने 2 मानों को प्रतिध्वनित किया, उन्हें अल्पविराम से अलग किया। इसलिए हम जितने चाहें उतने मान पास कर सकते हैं। निम्नलिखित दो उदाहरण एक ही परिणाम उत्पन्न करेंगे:

साथ ही PHP में वेरिएबल्स को आउटपुट करने के लिए एक शॉर्टहैंड सिंटैक्स है। के बजाय

PHP 5.4 से पहले, शॉर्टहैंड सिंटैक्स केवल शामिल होने पर ही काम करता था पीएचपी सेटिंग्स short_open_tag डायरेक्टिव, जो आपको छोटे ओपनिंग टैग का उपयोग करने की भी अनुमति देता है

एक चर के मान की जाँच करना

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

इसलिए, var_dump() फ़ंक्शन का उपयोग चर के मान की जांच के लिए किया जाता है:

स्क्रिप्ट निष्पादन का परिणाम:

स्ट्रिंग (5) "वस्या" स्ट्रिंग (0) ""

जैसा कि आप देख सकते हैं, PHP न केवल वेरिएबल की सामग्री, बल्कि वर्णों की संख्या और यहां तक ​​​​कि वेरिएबल (स्ट्रिंग) के प्रकार को भी आउटपुट करता है। हम अगले पाठों में डेटा प्रकारों को विस्तार से देखेंगे।

चरों को हटाना

आप unset() फ़ंक्शन का उपयोग करके किसी मौजूदा चर को निकाल सकते हैं:

और अब थोड़ा अभ्यास करने का समय आ गया है।

याद रखें, लगभग किसी भी PHP समस्या के कई समाधान हो सकते हैं। इसलिए, यदि आपके निर्णय इस साइट पर लिखे गए निर्णयों से भिन्न हैं, तो इसका मतलब यह बिल्कुल नहीं है कि आपने कुछ गलत किया है।

एक स्क्रिप्ट लिखें जो:
1. शीर्षक और सामग्री नाम के चर और कुछ मान बनाता है।
2. h1 टैग के अंदर शीर्षक चर का मान और div टैग के अंदर सामग्री चर का मान प्रदर्शित करता है।

समाधान दिखाएं

", $ शीर्षक,""; प्रतिध्वनि"

", $ सामग्री,"
"; ?>

मैं एक बार फिर आपका ध्यान इस तथ्य की ओर आकर्षित करना चाहता हूं कि केवल यही निर्णय सही नहीं है। उदाहरण के लिए, निम्न कोड समान परिणाम देगा:

विंडोज़ में पर्यावरण चर (पर्यावरण) में सिस्टम सेटिंग्स और उपयोगकर्ता के पर्यावरण के बारे में विभिन्न जानकारी होती है। उपयोगकर्ता, सिस्टम और प्रक्रिया पर्यावरण चर के बीच अंतर किया जाता है।

विंडोज़ में पर्यावरण चर की सामग्री को देखने का सबसे आसान तरीका सिस्टम गुणों को खोलना है ( sysdm.cpl) -> उन्नत -> पर्यावरण चर।जैसा कि आप देख सकते हैं, खुले हुए खंड में दो खंड हैं: ऊपरी भाग में उपयोगकर्ता के पर्यावरण चर होते हैं, निचले भाग में सिस्टम वाले होते हैं।

इसके अलावा, पर्यावरण चर सिस्टम रजिस्ट्री में संग्रहीत किए जाते हैं। उपयोगकर्ता चर में संग्रहीत हैं। प्रणालीगत - में HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment.

आप सभी पर्यावरण चर के मान प्रदर्शित कर सकते हैं कमांड लाइनखिड़कियाँ। आदेश सरल है:

आदेश पर्यावरण चर और उनके मूल्यों को सूचीबद्ध करेगा।

PowerShell में, सभी पर्यावरण चर प्रदर्शित करने के लिए, आप कमांड का उपयोग कर सकते हैं:

यदि आप केवल एक चर का मान प्रदर्शित करना चाहते हैं, तो आपको इको कमांड का उपयोग करने की आवश्यकता है, और चर का नाम प्रतिशत चिह्नों में संलग्न होना चाहिए। उदाहरण के लिए,

इको% सिस्टमरूट%

सेट > सी:\tmp\env_var.txt

किसी विशेष प्रक्रिया के पर्यावरण चर को मुफ्त में प्राप्त किया जा सकता है प्रक्रिया एक्सप्लोरर उपयोगिताओं(सिसिन्टर्नल्स से)। बस प्रक्रिया गुण खोलें और टैब पर जाएं पर्यावरण.

यह पाठ PHP चर के दायरे पर केंद्रित है। स्थानीय और वैश्विक दायरे के बीच अंतर की व्याख्या करता है, दिखाता है कि किसी फ़ंक्शन के अंदर वैश्विक चर का उपयोग कैसे करें, सुपरग्लोबल्स के साथ कैसे काम करें और स्थिर चर कैसे बनाएं।

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

गुंजाइश क्या है?

परिवर्तनीय दायरा वह संदर्भ है जिसके भीतर एक चर परिभाषित किया गया था और जहां इसे एक्सेस किया जा सकता है। PHP में दो वेरिएबल स्कोप हैं:

  • वैश्विक- वेरिएबल्स को स्क्रिप्ट में कहीं भी एक्सेस किया जा सकता है
  • स्थानीय- वेरिएबल्स को केवल उस फ़ंक्शन के भीतर एक्सेस किया जा सकता है जिसमें वे परिभाषित किए गए थे

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

वैश्विक दायरे वाले चर को वैश्विक चर कहा जाता है, और स्थानीय दायरे वाले को स्थानीय चर कहा जाता है।

यहां एक उदाहरण दिया गया है कि कैसे वैश्विक और स्थानीय चर काम करते हैं।

"; ) हेलो (); गूंज "मान \$ वैश्विक नाम:" $ वैश्विक नाम "
"; प्रतिध्वनि "मान \$ स्थानीय नाम: "$ स्थानीय नाम"
"; ?>

हाय हैरी! $globalName वैल्यू: "ज़ोया" $localName वैल्यू: ""

इस स्क्रिप्ट में, हमने दो वेरिएबल्स बनाए हैं:

  • $ वैश्विक नाम- यह वैश्विकचर
  • $ स्थानीय नाम- यह स्थानीयएक वेरिएबल जो SayHello() फ़ंक्शन के अंदर बनाया गया है।

वेरिएबल और फ़ंक्शन बनने के बाद, स्क्रिप्ट SayHello() को कॉल करती है, जो "हाय हैरी!" . स्क्रिप्ट तब इको फ़ंक्शन का उपयोग करके दो चर के मानों को आउटपुट करने का प्रयास करती है। यहाँ क्या होता है:

  • क्योंकि $ वैश्विक नामफ़ंक्शन के बाहर बनाया गया था, यह स्क्रिप्ट में कहीं भी उपलब्ध है, इसलिए "ज़ोया" प्रदर्शित होती है।
  • $ स्थानीय नामकेवल SayHello() फ़ंक्शन के अंदर ही उपलब्ध होगा। क्योंकि प्रतिध्वनि अभिव्यक्ति फ़ंक्शन के बाहर है, PHP स्थानीय चर तक पहुंच की अनुमति नहीं देता है। इसके बजाय, PHP मानता है कि कोड $localName नामक एक नया चर बनाएगा, जो एक खाली स्ट्रिंग के लिए डिफ़ॉल्ट होगा। यही कारण है कि प्रतिध्वनि के लिए दूसरा कॉल $localName चर के लिए "" मान को आउटपुट करता है।

किसी फ़ंक्शन के अंदर वैश्विक चर तक पहुँचना

एक वैश्विक चर का उपयोग करने के लिए समारोह के बाहरबस उसका नाम लिखो। लेकिन एक वैश्विक चर का उपयोग करने के लिए एक समारोह के अंदर, आपको पहले ग्लोबल कीवर्ड का उपयोग करके चर को वैश्विक घोषित करना होगा:

फंक्शन myFunction() (वैश्विक $globalVariable; // वैश्विक चर $globalVariable तक पहुँचना)

यदि आप नहीं करते हैं, तो PHP मान लेती है कि आप एक स्थानीय चर बना रहे हैं या उसका उपयोग कर रहे हैं।

यहां एक उदाहरण स्क्रिप्ट है जो फ़ंक्शन के अंदर वैश्विक चर का उपयोग करती है:

"; वैश्विक $ वैश्विक नाम; प्रतिध्वनि "नमस्कार $ वैश्विक नाम!
";) नमस्ते कहो (); ?>

निष्पादित होने पर, स्क्रिप्ट आउटपुट करेगी:

हाय हैरी! हैलो ज़ोया!

SayHello() फ़ंक्शन $globalName चर को वैश्विक घोषित करने के लिए वैश्विक कीवर्ड का उपयोग करता है। फिर वह वेरिएबल को एक्सेस कर सकती है और उसकी वैल्यू ("ज़ोया") को आउटपुट कर सकती है।

सुपरग्लोबल्स क्या हैं?

PHP में पूर्वनिर्धारित वैश्विक सरणियों का एक विशेष सेट है जिसमें विभिन्न जानकारी होती है। ऐसे सरणियों को कहा जाता है सुपरग्लोबल्स,चूंकि वे आंतरिक कार्य स्थान सहित स्क्रिप्ट में कहीं से भी पहुंच योग्य हैं, और उन्हें वैश्विक कीवर्ड का उपयोग करके परिभाषित करने की आवश्यकता नहीं है।

यहाँ PHP संस्करण 5.3 में उपलब्ध सुपरग्लोबल्स की सूची दी गई है:

  • $GLOBALS - स्क्रिप्ट में सभी वैश्विक चरों की सूची (सुपरग्लोबल्स को छोड़कर)
  • $_GET - GET अनुरोध के साथ ब्राउज़र द्वारा सबमिट किए गए सभी फ़ॉर्म फ़ील्ड की सूची शामिल है
  • $_POST - में POST अनुरोध का उपयोग करके ब्राउज़र द्वारा सबमिट किए गए सभी फ़ॉर्म फ़ील्ड की सूची होती है
  • $_COOKIE - इसमें ब्राउज़र द्वारा भेजी गई सभी कुकीज़ की सूची होती है
  • $_REQUEST - $_GET, $_POST, $_COOKIE सरणियों में निहित सभी कुंजी/मूल्य संयोजन शामिल हैं
  • $_FILES - ब्राउज़र द्वारा डाउनलोड की गई सभी फाइलों की सूची शामिल है
  • $_SESSION - आपको वर्तमान ब्राउज़र के लिए सत्र चरों को संग्रहीत और उपयोग करने की अनुमति देता है
  • $_SERVER - इसमें सर्वर के बारे में जानकारी होती है, जैसे निष्पादित की जा रही स्क्रिप्ट का फ़ाइल नाम और ब्राउज़र का IP पता।
  • $_ENV - PHP को पास किए गए पर्यावरण चरों की एक सूची शामिल है, जैसे कि CGI चर।
उदाहरण के लिए, आप स्क्रिप्ट के अनुरोध URL स्ट्रिंग में निहित चर के मान प्राप्त करने के लिए $_GET का उपयोग कर सकते हैं और उन्हें पृष्ठ पर प्रदर्शित कर सकते हैं:

यदि आप उपरोक्त स्क्रिप्ट को URL http://www.example.com/script.php?yourName=Fred के साथ चलाते हैं, तो यह आउटपुट देगा:

हे फ्रेड!

चेतावनी!एक वास्तविक लिपि में, कमजोर सुरक्षा के कारण इस डेटा ट्रांसफर का उपयोग कभी नहीं किया जाना चाहिए। आपको हमेशा डेटा को जांचना या फ़िल्टर करना चाहिए।

$GLOBALS सुपरग्लोबल उपयोग करने के लिए बहुत सुविधाजनक है, क्योंकि यह आपको वैश्विक कीवर्ड का उपयोग करने की आवश्यकता के बिना किसी फ़ंक्शन में वैश्विक चरों तक पहुंच को व्यवस्थित करने की अनुमति देता है। उदाहरण के लिए:

"; ) SayHello(); // "Hello Zoya!" प्रदर्शित करता है?>

स्थैतिक चर: वे कहीं आसपास हैं

जब आप किसी फ़ंक्शन के भीतर एक स्थानीय चर बनाते हैं, तो यह फ़ंक्शन के चलने के दौरान ही मौजूद रहता है। जब फ़ंक्शन समाप्त हो जाता है, तो स्थानीय चर गायब हो जाता है। जब फ़ंक्शन को दोबारा कॉल किया जाता है, तो एक नया स्थानीय चर बनाया जाता है।

ज्यादातर मामलों में, यह बहुत अच्छा काम करता है। इस प्रकार, कार्य आत्मनिर्भर हैं और हर बार बुलाए जाने पर हमेशा उसी तरह काम करते हैं।

हालाँकि, ऐसी स्थितियाँ हैं जहाँ एक स्थानीय चर बनाना सुविधाजनक होगा जो फ़ंक्शन कॉल के बीच "याद" रखता है। ऐसे चर को स्थैतिक कहा जाता है।

किसी फ़ंक्शन में एक स्थिर चर बनाने के लिए, आपको चर नाम से पहले स्थिर कीवर्ड का उपयोग करना चाहिए और इसे प्रारंभिक मान देना सुनिश्चित करें। उदाहरण के लिए:

फ़ंक्शन myFunction() ( स्थिर $ myVariable = 0; )

ऐसी स्थिति पर विचार करें जहां स्थैतिक चर का उपयोग करना सुविधाजनक हो। मान लीजिए कि आप एक ऐसा फ़ंक्शन बनाते हैं, जिसे कॉल करने पर, एक विजेट बनाता है और पहले से बनाए गए विजेट की संख्या को प्रिंट करता है। आप स्थानीय चर का उपयोग करके इस तरह कोड लिखने का प्रयास कर सकते हैं:


"; इको createWidget ()।" हम पहले ही बना चुके हैं।
"; इको createWidget ()।" हम पहले ही बना चुके हैं।>
"; ?>

लेकिन, चूँकि $numWidgets वेरिएबल हर बार फंक्शन कॉल करने पर बनाया जाता है, हमें निम्नलिखित परिणाम मिलते हैं:

हम कुछ विजेट बनाते हैं... 1 हम पहले ही बना चुके हैं। 1 हम पहले ही बना चुके हैं। 1 हम पहले ही बना चुके हैं।

लेकिन एक स्थिर चर का उपयोग करके, हम मान को एक फ़ंक्शन कॉल से अगले तक रख सकते हैं:

"; इको createWidget ()।" हम पहले ही बना चुके हैं।
"; इको createWidget ()।" हम पहले ही बना चुके हैं।
"; इको क्रिएटविजेट ()।"> हमने पहले ही बना लिया है।
"; ?>

अब स्क्रिप्ट अपेक्षित परिणाम देगी:

हम कुछ विजेट बनाते हैं... 1 हम पहले ही बना चुके हैं। 2 हम पहले ही बना चुके हैं। 3 हम पहले ही बना चुके हैं।

यद्यपि एक स्थैतिक चर फ़ंक्शन कॉल के बीच अपना मान बनाए रखता है, यह केवल तभी मान्य होता है जब स्क्रिप्ट चल रही हो। एक बार जब स्क्रिप्ट अपना निष्पादन पूरा कर लेती है, तो सभी स्थैतिक चर नष्ट हो जाते हैं, साथ ही साथ स्थानीय और वैश्विक चर भी।

बस इतना ही! PHP दस्तावेज़ों को अक्सर देखें।

13 साल पहले

देखने के लिए थोड़ा पकड़ लिया:

यदि आप RegisterGlobals और संबंधित को बंद करते हैं, तो get_defined_vars() का उपयोग करें, आपको निम्न जैसा कुछ दिखाई दे सकता है:

सरणी
[ग्लोबल] => ऐरे
[ग्लोबल] => ऐरे
* रिकर्सन *
[_POST] => ऐरे ()
[_GET] => ऐरे ()
[_COOKIE] => ऐरे ()
[ _FILES ] => ऐरे ()
)

[_POST] => ऐरे ()
[_GET] => ऐरे ()
[_COOKIE] => ऐरे ()
[ _FILES ] => ऐरे ()

)
?>

ध्यान दें कि $_SERVER वहां नहीं है। ऐसा लगता है कि PHP केवल सुपरग्लोबल $_SERVER को लोड करता है अगर इसे कहीं इस्तेमाल किया जाता है। आप यह कर सकते हैं:

प्रिंट"

" .htmlspecialchars(print_r(get_defined_vars(), true ))।"
" ;
प्रिंट"
" .htmlspecialchars (print_r ($_SERVER , true ))।"
" ;
?>

और फिर दोनों सूचियों में $_SERVER दिखाई देगा। मुझे लगता है कि यह वास्तव में एक पकड़ नहीं है, क्योंकि किसी भी तरह से कुछ भी बुरा नहीं होगा, लेकिन फिर भी यह एक दिलचस्प जिज्ञासा है।

6 साल पहले

चूंकि get_defined_vars() फ़ंक्शन को कॉल करने वाले बिंदु पर केवल चर प्राप्त होते हैं, इसलिए वर्तमान दायरे में परिभाषित चर प्राप्त करने का एक आसान तरीका है।

// आपकी PHP स्क्रिप्ट का सबसे ऊपर
$vars = get_defined_vars();

// अब अपना सामान करो
$ फू = "फू";
$ बार = "बार";

// वर्तमान दायरे में परिभाषित सभी चर प्राप्त करें
$vars = array_diff(get_defined_vars(), $vars);

गूंज "

"
;
प्रिंट_आर ($ संस्करण);
गूंज "
" ;
?>

15 साल पहले

यहां एक फ़ंक्शन है जो डिस्प्ले या ईमेल के लिए डीबग रिपोर्ट जेनरेट करता है
get_defined_vars का उपयोग करना। बिना विस्तृत स्नैपशॉट प्राप्त करने के लिए बढ़िया
उपयोगकर्ता इनपुट पर निर्भर।

फ़ंक्शन जनरेटडिबग रिपोर्ट ($ विधि, $ परिभाषित_वर, $ ईमेल = "अपरिभाषित") (
// प्रदर्शित करने या ईमेल करने के लिए डिबग रिपोर्ट बनाने का कार्य।
// उपयोग: GenerateDebugReport (विधि, get_defined_vars (), ईमेल);
// जहां विधि "ब्राउज़र" या "ईमेल" है।

// "get_defined_vars" द्वारा लौटाई गई चाबियों के लिए एक अनदेखा सूची बनाएं।
// उदाहरण के लिए, HTTP_POST_VARS, HTTP_GET_VARS और अन्य हैं
// अनावश्यक (_POST, _GET के समान)
// इसके अलावा वे संस्करण शामिल करें जिन्हें आप सुरक्षा कारणों से अनदेखा करना चाहते हैं - अर्थात। PHPSESSID।
$ इग्नोरलिस्ट = सरणी ("HTTP_POST_VARS", "HTTP_GET_VARS",
"HTTP_COOKIE_VARS", "HTTP_SERVER_VARS",
"HTTP_ENV_VARS", "HTTP_SESSION_VARS",
"_ENV", "PHPSESSID", "SESS_DBUSER",
"SESS_DBPASS", "HTTP_COOKIE");

$ टाइमस्टैम्प = दिनांक ("एम/डी/वाई एच: एम: एस");
$message = "डीबग रिपोर्ट बनाई $timestamp \n";

// अच्छी माप के लिए अंतिम SQL त्रुटि प्राप्त करें, जहां $link संसाधन पहचानकर्ता है
// mysql_connect के लिए। अपने डेटाबेस या अमूर्त सेटअप के लिए टिप्पणी करें या संशोधित करें।
वैश्विक $ लिंक;
$ sql_error = mysql_error ($ लिंक);
अगर ($ sql_error) (
$ संदेश। = "\ n MySQL संदेश: \ n"। mysql_error ($ लिंक);
}
// MySQL को समाप्त करें

// यहाँ एक पुनरावर्ती कार्य का उपयोग कर सकता है। तुम्हें नया तरीका मिल गया है ;-)
foreach($defined_vars as $key => $val )(
if(is_array ($val ) && ! in_array ($key , $ignorelist ) && count ($val ) > 0 )(
$ संदेश। = "\ n $ कुंजी सरणी (कुंजी = मान): \ n";
foreach($val as $subkey => $subval )(
if(! in_array ($उपकुंजी , $ignorelist ) && ! is_array ($subval ))(
$ संदेश। = $ उपकुंजी। "="। $सबवल। "\एन" ;
}
elseif(! in_array ($उपकुंजी , $ignorelist ) && is_array ($subval ))(
foreach($subval as $subkey => $subsubval )(
if(! in_array ($ उपउपकुंजी , $ignorelist ))(
$ संदेश। = $ उपकुंजी। "="। $ सबसबवल। "\एन" ;
}
}
}
}
}
एल्सिफ(!
is_array ($ वैल) &&! in_array ($कुंजी , $ignorelist ) && $val )(
$ संदेश। = "\ n परिवर्तनीय"। $ कुंजी। "="। $वैल। "\एन" ;
}
}

अगर ($ विधि == "ब्राउज़र") (
गूंज nl2br ($ संदेश);
}
और ($ विधि == "ईमेल") (
अगर ($ ईमेल == "अपरिभाषित") (
$ईमेल = $_SERVER["SERVER_ADMIN"];
}

$mresult = मेल ($ईमेल, "के लिए डीबग रिपोर्ट" . $_ENV [ "HOSTNAME" ]. "", $message);
अगर ($ mresult == 1) (
गूंज "डीबग रिपोर्ट सफलतापूर्वक भेजी गई।\n";
}
अन्य(
गूंज "डीबग रिपोर्ट भेजने में विफल.\n";
}
}
}
?>

17 साल पहले

get_defined_vars ऑब्जेक्ट को XML में कनवर्ट करने के लिए सरल रूटीन।

फ़ंक्शन obj2xml ($ v, $ इंडेंट = "") (
जबकि (सूची ($ कुंजी, $ वैल) = प्रत्येक ($ वी)) (
अगर ($ कुंजी == "__attr") जारी रखें;
// __attr के लिए जांचें
अगर (is_object ($ वैल -> __attr)) (
जबकि (सूची ($ key2, $ val2) = प्रत्येक ($ वैल -> __attr)) (
$atr .= " $key2 =\" $val2 \"" ;
}
}
और $ attr = "";
अगर (is_array ($ वैल) || is_object ($ वैल)) (
प्रिंट ("$ इंडेंट< $key$attr >\एन");
obj2xml ($ वैल, $ इंडेंट। "");
प्रिंट ("$ इंडेंट\एन");
}
अन्य प्रिंट ("$ इंडेंट< $key$attr >$वैल\एन");
}
}

// उदाहरण वस्तु
$x -> नाम -> पहला = "जॉन";
$x -> नाम -> अंतिम = "स्मिथ";
$x -> arr ["फल"] = "बन्नाना";
$x -> आगमन ["शाकाहारी"] = "गाजर";
$y -> ग्राहक = $x;
$y -> ग्राहक -> __attr -> आईडी = "176C4";

$ z = get_defined_vars ();
obj2xml ($ z ["वाई"]);
?>
आउटपुट होगा:


जॉन
लोहार


केला
गाजर

11 साल पहले

एक नोट के रूप में, get_defined_vars() चर संदर्भों का एक सेट वापस नहीं करता है (जैसा कि मुझे उम्मीद थी)। उदाहरण के लिए:

// एक चर परिभाषित करें
$my_var = "फू";

// परिभाषित चरों की हमारी सूची प्राप्त करें
$ परिभाषित_वर = get_defined_vars ();

// अब लौटे सरणी के माध्यम से मान बदलने का प्रयास करें
$ परिभाषित_वर ["my_var"] = "बार";

प्रतिध्वनि $my_var , "\n" ;

?>

आउटपुट "फू" (मूल मूल्य) होगा। यह "अच्छा होगा अगर get_defined_vars() के पास संदर्भ बनाने के लिए वैकल्पिक तर्क था, लेकिन मुझे लगता है कि यह एक विशेष अनुरोध है। आप इसे स्वयं (कम आसानी से) कुछ ऐसा कर सकते हैं:

$ परिभाषित_वर = सरणी ();
$var_names = array_keys(get_defined_vars());

foreach ($var_names $var_name के रूप में)
{
$defined_vars [ $var_name ] =& $ $var_name ;
}

?>

1 साल पहले

मैंने यहां "यह" get_defined_vars में होने के बारे में पहले पोस्ट किया था।

यह पता चला है कि यह हमेशा नहीं होता है, लेकिन कुछ मामलों में यह अस्पष्ट रूप से दिखाई देगा।

पीएचपी-आर"
क्लास टेस्ट (
सार्वजनिक कार्य a() (var_dump(array_keys(get_defined_vars()));$a = 123;)
सार्वजनिक समारोह बी () (var_dump (array_keys (get_defined_vars ())); $ यह;)
}
$ टी = नया टेस्ट ();
$t->a();
$t->b();
"

सरणी ()
सरणी ("यह")

यह PHP 7.2 में नहीं होता है लेकिन PHP 5.6 में होगा।

1 साल पहले

यहां कुछ टिप्पणियां इंगित करती हैं कि यह फ़ंक्शन संदर्भ वापस नहीं करेगा। हालांकि यह नाम लौटाता है और नाम "संदर्भ" हैं।

मैं यहाँ उन सुझावों की अनुशंसा नहीं करूँगा जो इसे संदर्भों में परिवर्तित करते हैं।

सार्वजनिक कार्य एक्स ($ ए, $ बी, $ सी) (
foreach (array_keys (get_defined_vars ()) $ कुंजी के रूप में)
अगर ($ कुंजी! == "यह")
$this->y($($key));
}

सार्वजनिक समारोह y(&$input) (
$ इनपुट ++;
}

$() के बजाय आप $$ का भी उपयोग कर सकते हैं।

मैंने अपने समय में बेहद सामान्य कोड बनाने के लिए कुछ अजीब चीजें की हैं लेकिन मुझे उपरोक्त जैसा कुछ भी करने की ज़रूरत नहीं है। यह काम भी नहीं कर सकता है (लेकिन चूंकि यह $a[$ key] से अलग नहीं है)।

आप $$ key++ भी कर सकते हैं लेकिन मैंने कभी ऐसा कोड नहीं देखा है जो भयानक रूप से खराब नहीं था (गतिशील का उपयोग करके जहां गतिशील फायदेमंद नहीं है)।

अगर आप ऐसा कुछ कर रहे हैं तो इसे अतिरिक्त जांच दें।

13 साल पहले

देखने के लिए थोड़ा पकड़ लिया:

यदि आप RegisterGlobals और संबंधित को बंद करते हैं, तो get_defined_vars() का उपयोग करें, आपको निम्न जैसा कुछ दिखाई दे सकता है:

सरणी
[ग्लोबल] => ऐरे
[ग्लोबल] => ऐरे
* रिकर्सन *
[_POST] => ऐरे ()
[_GET] => ऐरे ()
[_COOKIE] => ऐरे ()
[ _FILES ] => ऐरे ()
)

[_POST] => ऐरे ()
[_GET] => ऐरे ()
[_COOKIE] => ऐरे ()
[ _FILES ] => ऐरे ()

)
?>

ध्यान दें कि $_SERVER वहां नहीं है। ऐसा लगता है कि PHP केवल सुपरग्लोबल $_SERVER को लोड करता है अगर इसे कहीं इस्तेमाल किया जाता है। आप यह कर सकते हैं:

प्रिंट"

" .htmlspecialchars(print_r(get_defined_vars(), true ))।"
" ;
प्रिंट"
" .htmlspecialchars (print_r ($_SERVER , true ))।"
" ;
?>

और फिर दोनों सूचियों में $_SERVER दिखाई देगा। मुझे लगता है कि यह वास्तव में एक पकड़ नहीं है, क्योंकि किसी भी तरह से कुछ भी बुरा नहीं होगा, लेकिन फिर भी यह एक दिलचस्प जिज्ञासा है।

6 साल पहले

चूंकि get_defined_vars() फ़ंक्शन को कॉल करने वाले बिंदु पर केवल चर प्राप्त होते हैं, इसलिए वर्तमान दायरे में परिभाषित चर प्राप्त करने का एक आसान तरीका है।

// आपकी PHP स्क्रिप्ट का सबसे ऊपर
$vars = get_defined_vars();

// अब अपना सामान करो
$ फू = "फू";
$ बार = "बार";

// वर्तमान दायरे में परिभाषित सभी चर प्राप्त करें
$vars = array_diff(get_defined_vars(), $vars);

गूंज "

"
;
प्रिंट_आर ($ संस्करण);
गूंज "
" ;
?>

15 साल पहले

यहां एक फ़ंक्शन है जो डिस्प्ले या ईमेल के लिए डीबग रिपोर्ट जेनरेट करता है
get_defined_vars का उपयोग करना। बिना विस्तृत स्नैपशॉट प्राप्त करने के लिए बढ़िया
उपयोगकर्ता इनपुट पर निर्भर।

फ़ंक्शन जनरेटडिबग रिपोर्ट ($ विधि, $ परिभाषित_वर, $ ईमेल = "अपरिभाषित") (
// प्रदर्शित करने या ईमेल करने के लिए डिबग रिपोर्ट बनाने का कार्य।
// उपयोग: GenerateDebugReport (विधि, get_defined_vars (), ईमेल);
// जहां विधि "ब्राउज़र" या "ईमेल" है।

// "get_defined_vars" द्वारा लौटाई गई चाबियों के लिए एक अनदेखा सूची बनाएं।
// उदाहरण के लिए, HTTP_POST_VARS, HTTP_GET_VARS और अन्य हैं
// अनावश्यक (_POST, _GET के समान)
// इसके अलावा वे संस्करण शामिल करें जिन्हें आप सुरक्षा कारणों से अनदेखा करना चाहते हैं - अर्थात। PHPSESSID।
$ इग्नोरलिस्ट = सरणी ("HTTP_POST_VARS", "HTTP_GET_VARS",
"HTTP_COOKIE_VARS", "HTTP_SERVER_VARS",
"HTTP_ENV_VARS", "HTTP_SESSION_VARS",
"_ENV", "PHPSESSID", "SESS_DBUSER",
"SESS_DBPASS", "HTTP_COOKIE");

$ टाइमस्टैम्प = दिनांक ("एम/डी/वाई एच: एम: एस");
$message = "डीबग रिपोर्ट बनाई $timestamp \n";

// अच्छी माप के लिए अंतिम SQL त्रुटि प्राप्त करें, जहां $link संसाधन पहचानकर्ता है
// mysql_connect के लिए। अपने डेटाबेस या अमूर्त सेटअप के लिए टिप्पणी करें या संशोधित करें।
वैश्विक $ लिंक;
$ sql_error = mysql_error ($ लिंक);
अगर ($ sql_error) (
$ संदेश। = "\ n MySQL संदेश: \ n"। mysql_error ($ लिंक);
}
// MySQL को समाप्त करें

// यहाँ एक पुनरावर्ती कार्य का उपयोग कर सकता है। तुम्हें नया तरीका मिल गया है ;-)
foreach($defined_vars as $key => $val )(
if(is_array ($val ) && ! in_array ($key , $ignorelist ) && count ($val ) > 0 )(
$ संदेश। = "\ n $ कुंजी सरणी (कुंजी = मान): \ n";
foreach($val as $subkey => $subval )(
if(! in_array ($उपकुंजी , $ignorelist ) && ! is_array ($subval ))(
$ संदेश। = $ उपकुंजी। "="। $सबवल। "\एन" ;
}
elseif(! in_array ($उपकुंजी , $ignorelist ) && is_array ($subval ))(
foreach($subval as $subkey => $subsubval )(
if(! in_array ($ उपउपकुंजी , $ignorelist ))(
$ संदेश। = $ उपकुंजी। "="। $ सबसबवल। "\एन" ;
}
}
}
}
}
एल्सिफ(!
is_array ($ वैल) &&! in_array ($कुंजी , $ignorelist ) && $val )(
$ संदेश। = "\ n परिवर्तनीय"। $ कुंजी। "="। $वैल। "\एन" ;
}
}

अगर ($ विधि == "ब्राउज़र") (
गूंज nl2br ($ संदेश);
}
और ($ विधि == "ईमेल") (
अगर ($ ईमेल == "अपरिभाषित") (
$ईमेल = $_SERVER["SERVER_ADMIN"];
}

$mresult = मेल ($ईमेल, "के लिए डीबग रिपोर्ट" . $_ENV [ "HOSTNAME" ]. "", $message);
अगर ($ mresult == 1) (
गूंज "डीबग रिपोर्ट सफलतापूर्वक भेजी गई।\n";
}
अन्य(
गूंज "डीबग रिपोर्ट भेजने में विफल.\n";
}
}
}
?>

17 साल पहले

get_defined_vars ऑब्जेक्ट को XML में कनवर्ट करने के लिए सरल रूटीन।

फ़ंक्शन obj2xml ($ v, $ इंडेंट = "") (
जबकि (सूची ($ कुंजी, $ वैल) = प्रत्येक ($ वी)) (
अगर ($ कुंजी == "__attr") जारी रखें;
// __attr के लिए जांचें
अगर (is_object ($ वैल -> __attr)) (
जबकि (सूची ($ key2, $ val2) = प्रत्येक ($ वैल -> __attr)) (
$atr .= " $key2 =\" $val2 \"" ;
}
}
और $ attr = "";
अगर (is_array ($ वैल) || is_object ($ वैल)) (
प्रिंट ("$ इंडेंट< $key$attr >\एन");
obj2xml ($ वैल, $ इंडेंट। "");
प्रिंट ("$ इंडेंट\एन");
}
अन्य प्रिंट ("$ इंडेंट< $key$attr >$वैल\एन");
}
}

// उदाहरण वस्तु
$x -> नाम -> पहला = "जॉन";
$x -> नाम -> अंतिम = "स्मिथ";
$x -> arr ["फल"] = "बन्नाना";
$x -> आगमन ["शाकाहारी"] = "गाजर";
$y -> ग्राहक = $x;
$y -> ग्राहक -> __attr -> आईडी = "176C4";

$ z = get_defined_vars ();
obj2xml ($ z ["वाई"]);
?>
आउटपुट होगा:


जॉन
लोहार


केला
गाजर

11 साल पहले

एक नोट के रूप में, get_defined_vars() चर संदर्भों का एक सेट वापस नहीं करता है (जैसा कि मुझे उम्मीद थी)। उदाहरण के लिए:

// एक चर परिभाषित करें
$my_var = "फू";

// परिभाषित चरों की हमारी सूची प्राप्त करें
$ परिभाषित_वर = get_defined_vars ();

// अब लौटे सरणी के माध्यम से मान बदलने का प्रयास करें
$ परिभाषित_वर ["my_var"] = "बार";

प्रतिध्वनि $my_var , "\n" ;

?>

आउटपुट "फू" (मूल मूल्य) होगा। यह "अच्छा होगा अगर get_defined_vars() के पास संदर्भ बनाने के लिए वैकल्पिक तर्क था, लेकिन मुझे लगता है कि यह एक विशेष अनुरोध है। आप इसे स्वयं (कम आसानी से) कुछ ऐसा कर सकते हैं:

$ परिभाषित_वर = सरणी ();
$var_names = array_keys(get_defined_vars());

foreach ($var_names $var_name के रूप में)
{
$defined_vars [ $var_name ] =& $ $var_name ;
}

?>

1 साल पहले

मैंने यहां "यह" get_defined_vars में होने के बारे में पहले पोस्ट किया था।

यह पता चला है कि यह हमेशा नहीं होता है, लेकिन कुछ मामलों में यह अस्पष्ट रूप से दिखाई देगा।

पीएचपी-आर"
क्लास टेस्ट (
सार्वजनिक कार्य a() (var_dump(array_keys(get_defined_vars()));$a = 123;)
सार्वजनिक समारोह बी () (var_dump (array_keys (get_defined_vars ())); $ यह;)
}
$ टी = नया टेस्ट ();
$t->a();
$t->b();
"

सरणी ()
सरणी ("यह")

यह PHP 7.2 में नहीं होता है लेकिन PHP 5.6 में होगा।

1 साल पहले

यहां कुछ टिप्पणियां इंगित करती हैं कि यह फ़ंक्शन संदर्भ वापस नहीं करेगा। हालांकि यह नाम लौटाता है और नाम "संदर्भ" हैं।

मैं यहाँ उन सुझावों की अनुशंसा नहीं करूँगा जो इसे संदर्भों में परिवर्तित करते हैं।

सार्वजनिक कार्य एक्स ($ ए, $ बी, $ सी) (
foreach (array_keys (get_defined_vars ()) $ कुंजी के रूप में)
अगर ($ कुंजी! == "यह")
$this->y($($key));
}

सार्वजनिक समारोह y(&$input) (
$ इनपुट ++;
}

$() के बजाय आप $$ का भी उपयोग कर सकते हैं।

मैंने अपने समय में बेहद सामान्य कोड बनाने के लिए कुछ अजीब चीजें की हैं लेकिन मुझे उपरोक्त जैसा कुछ भी करने की ज़रूरत नहीं है। यह काम भी नहीं कर सकता है (लेकिन चूंकि यह $a[$ key] से अलग नहीं है)।

आप $$ key++ भी कर सकते हैं लेकिन मैंने कभी ऐसा कोड नहीं देखा है जो भयानक रूप से खराब नहीं था (गतिशील का उपयोग करके जहां गतिशील फायदेमंद नहीं है)।

अगर आप ऐसा कुछ कर रहे हैं तो इसे अतिरिक्त जांच दें।



संबंधित आलेख: