PHP में चर। PHP Php में वेरिएबल्स सभी पोस्ट वेरिएबल को डंप करते हैं

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

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

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

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

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

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

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

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

set\u003e c: \\ tmp \\ env_var.txt

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

13 साल पहले

थोड़ा गौचा के लिए बाहर देखने के लिए:

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

सरणी
[GLOBALS] \u003d\u003e एरियर
[GLOBALS] \u003d\u003e एरियर
* रिकॉर्ड *
[_POST] \u003d\u003e एरे ()
[_GET] \u003d\u003e एरे ()
[_COOKIE] \u003d\u003e ऐरे ()
[_FILES] \u003d\u003e ऐरे ()
)

[_POST] \u003d\u003e एरे ()
[_GET] \u003d\u003e एरे ()
[_COOKIE] \u003d\u003e ऐरे ()
[_FILES] \u003d\u003e ऐरे ()

)
?>

ध्यान दें कि $ _SERVER isn "t there। ऐसा लगता है कि php केवल सुपरग्लोबल $ _SERVER को लोड करता है यदि यह कहीं उपयोग किया जाता है। आप ऐसा कर सकते हैं:

प्रिंट करें "

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

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

6 साल पहले

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

// आपकी php स्क्रिप्ट के बहुत ऊपर
$ var \u003d get_defined_vars ();

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

// मौजूदा दायरे में परिभाषित सभी चर प्राप्त करें
$ var \u003d array_diff (get_defined_vars (), $ var);

गूंज "

"
;
print_r ($ var);
गूंज "
" ;
?>

15 साल पहले

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

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

// "get_defined_vars" द्वारा दी गई कुंजियों के लिए एक अनदेखा सूची बनाएं।
// उदाहरण के लिए, HTTP_POST_VARS, HTTP_GET_VARS और अन्य हैं
// बेमानी (_POST, _GET के समान)
// इसके अलावा सुरक्षा कारणों के लिए आपके इच्छित संस्करण भी शामिल हैं - i.e. PHPSESSID।
$ अज्ञानी \u003d सरणी ("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");

$ टाइमस्टैम्प \u003d तिथि ("एम / डी / वाई एच: एम: एस");
$ संदेश \u003d "डीबग रिपोर्ट ने $ टाइमस्टैम्प \\ n बनाया";

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

// यहाँ एक पुनरावर्ती फ़ंक्शन का उपयोग कर सकता है। तुम्हें नया तरीका मिल गया है ;-)
foreach ($ define_vars $ key \u003d\u003e $ val) के रूप में ()
अगर (is_array ($ val) &&! in_array ($ key, $ ignorelist) && count ($ val)\u003e 0) (
$ संदेश। \u003d "\\ n $ कुंजी सरणी (कुंजी \u003d मान): \\ n";
foreach ($ $ $ subkey \u003d\u003e $ subval) (
अगर (in_array ($ subkey, $ ignorelist) &&! is_array ($ sublog)) (
$ संदेश। \u003d $ उपकुंजी। "\u003d"। $ सबवे। "\\ _";
}
अन्य ((in_array ($ subkey, $ ignorelist)) && is_array ($ sublog) ((
foreach ($ सब उपकुब्ज के रूप में $ सबवेल्की \u003d\u003e $ उप-उपवन) (
अगर (in_array ($ subsubkey, $ ignorelist)) (
$ संदेश। \u003d $ सदस्यता। "\u003d"। $ सबसुवल। \\ _ '' ;
}
}
}
}
}
और!
is_array ($ val) &&! in_array ($ कुंजी, $ अज्ञानी) && $ val) (
$ संदेश। \u003d "\\ n विचारणीय"। $ कुंजी। "\u003d"। $ वैल। "\\ _";
}
}

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

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

17 साल पहले

XML के लिए एक get_defined_vars वस्तु परिवर्तित करने के लिए सरल दिनचर्या।

समारोह obj2xml ($ v, $ इंडेंट \u003d "") (
जबकि (सूची ($ कुंजी, $ वैल) \u003d प्रत्येक ($ v)) (
अगर ($ कुंजी \u003d\u003d "__attr") जारी रहे;
// __attr के लिए जाँच करें
अगर (is_object ($ val -\u003e __attr)) (
जबकि (सूची ($ key2, $ val2) \u003d प्रत्येक ($ val -\u003e __attr)) ()
$ attr। \u003d "$ key2 \u003d \\" $ val2 \\ "";
}
}
$ $ attr \u003d "";
अगर (is_array ($ val) || is_object ($ val)) (
प्रिंट ("$ इंडेंट)< $key$attr >\\ n ");
obj2xml ($ वैल, $ इंडेंट। "");
प्रिंट ("$ इंडेंट)\\ n ");
}
और प्रिंट ("$ इंडेंट)< $key$attr > $ वैल\\ n ");
}
}

// उदाहरण वस्तु
$ x -\u003e नाम -\u003e पहला \u003d "जॉन";
$ x -\u003e नाम -\u003e अंतिम \u003d "स्मिथ";
$ x -\u003e गिरफ्तारी ["फल"] \u003d "बन्नाना";
$ x -\u003e गिरफ्तारी ["वेज"] \u003d "गाजर";
$ y -\u003e ग्राहक \u003d $ x;
$ y -\u003e ग्राहक -\u003e __attr -\u003e id \u003d "176C4";

$ z \u003d get_defined_vars ();
obj2xml ($ z ["y"]);
?>
उत्पादन होगा:


जॉन
लोहार


bannana
गाजर

11 साल पहले

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

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

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

// अब दिए गए सरणी के माध्यम से मान को बदलने का प्रयास करें
$ परिभाषित_वार ["my_var"] \u003d "बार";

इको $ my_var, "\\ n";

?>

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

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

foreach ($ var_names $ var_name के रूप में)
{
$ परिभाषित_वार [$ var_name] \u003d & $ $ var_name;
}

?>

1 साल पहले

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

यह पता चला है कि यह हमेशा नहीं होता है, लेकिन कुछ मामलों में यह बेवजह दिखाई देगा।

Php -r "
क्लास टेस्ट (
सार्वजनिक कार्य () (var_dump (array_keys (get_defined_vars))); $ a \u003d 123;)
सार्वजनिक समारोह b () (var_dump (array_keys (get_defined_vars) ())। $; यह!)।
}
$ t \u003d नया परीक्षण ();
$ t-\u003e ();
$ टी-\u003e बी ();
"

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

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

1 साल पहले

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

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

सार्वजनिक समारोह x ($ a, $ b, $ c) (
$ कुंजी के रूप में foreach (array_keys (get_defined_vars) ())
अगर ($ कुंजी! \u003d\u003d "यह")
$ यह-\u003e y ($ ($ कुंजी));
}

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

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

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

आप $ $ $ कुंजी भी कर सकते हैं, लेकिन मैंने कभी भी ऐसा कोड नहीं देखा, जो कि भयानक नहीं था (डायनेमिक जहां डायनामिक "टी फायदेमंद" का उपयोग कर रहा है)।

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

13 साल पहले

थोड़ा गौचा के लिए बाहर देखने के लिए:

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

सरणी
[GLOBALS] \u003d\u003e एरियर
[GLOBALS] \u003d\u003e एरियर
* रिकॉर्ड *
[_POST] \u003d\u003e एरे ()
[_GET] \u003d\u003e एरे ()
[_COOKIE] \u003d\u003e ऐरे ()
[_FILES] \u003d\u003e ऐरे ()
)

[_POST] \u003d\u003e एरे ()
[_GET] \u003d\u003e एरे ()
[_COOKIE] \u003d\u003e ऐरे ()
[_FILES] \u003d\u003e ऐरे ()

)
?>

ध्यान दें कि $ _SERVER isn "t there। ऐसा लगता है कि php केवल सुपरग्लोबल $ _SERVER को लोड करता है यदि यह कहीं उपयोग किया जाता है। आप ऐसा कर सकते हैं:

प्रिंट करें "

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

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

6 साल पहले

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

// आपकी php स्क्रिप्ट के बहुत ऊपर
$ var \u003d get_defined_vars ();

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

// मौजूदा दायरे में परिभाषित सभी चर प्राप्त करें
$ var \u003d array_diff (get_defined_vars (), $ var);

गूंज "

"
;
print_r ($ var);
गूंज "
" ;
?>

15 साल पहले

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

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

// "get_defined_vars" द्वारा दी गई कुंजियों के लिए एक अनदेखा सूची बनाएं।
// उदाहरण के लिए, HTTP_POST_VARS, HTTP_GET_VARS और अन्य हैं
// बेमानी (_POST, _GET के समान)
// इसके अलावा सुरक्षा कारणों के लिए आपके इच्छित संस्करण भी शामिल हैं - i.e. PHPSESSID।
$ अज्ञानी \u003d सरणी ("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");

$ टाइमस्टैम्प \u003d तिथि ("एम / डी / वाई एच: एम: एस");
$ संदेश \u003d "डीबग रिपोर्ट ने $ टाइमस्टैम्प \\ n बनाया";

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

// यहाँ एक पुनरावर्ती फ़ंक्शन का उपयोग कर सकता है। तुम्हें नया तरीका मिल गया है ;-)
foreach ($ define_vars $ key \u003d\u003e $ val) के रूप में ()
अगर (is_array ($ val) &&! in_array ($ key, $ ignorelist) && count ($ val)\u003e 0) (
$ संदेश। \u003d "\\ n $ कुंजी सरणी (कुंजी \u003d मान): \\ n";
foreach ($ $ $ subkey \u003d\u003e $ subval) (
अगर (in_array ($ subkey, $ ignorelist) &&! is_array ($ sublog)) (
$ संदेश। \u003d $ उपकुंजी। "\u003d"। $ सबवे। "\\ _";
}
अन्य ((in_array ($ subkey, $ ignorelist)) && is_array ($ sublog) ((
foreach ($ सब उपकुब्ज के रूप में $ सबवेल्की \u003d\u003e $ उप-उपवन) (
अगर (in_array ($ subsubkey, $ ignorelist)) (
$ संदेश। \u003d $ सदस्यता। "\u003d"। $ सबसुवल। \\ _ '' ;
}
}
}
}
}
और!
is_array ($ val) &&! in_array ($ कुंजी, $ अज्ञानी) && $ val) (
$ संदेश। \u003d "\\ n विचारणीय"। $ कुंजी। "\u003d"। $ वैल। "\\ _";
}
}

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

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

17 साल पहले

XML के लिए एक get_defined_vars वस्तु परिवर्तित करने के लिए सरल दिनचर्या।

समारोह obj2xml ($ v, $ इंडेंट \u003d "") (
जबकि (सूची ($ कुंजी, $ वैल) \u003d प्रत्येक ($ v)) (
अगर ($ कुंजी \u003d\u003d "__attr") जारी रहे;
// __attr के लिए जाँच करें
अगर (is_object ($ val -\u003e __attr)) (
जबकि (सूची ($ key2, $ val2) \u003d प्रत्येक ($ val -\u003e __attr)) ()
$ attr। \u003d "$ key2 \u003d \\" $ val2 \\ "";
}
}
$ $ attr \u003d "";
अगर (is_array ($ val) || is_object ($ val)) (
प्रिंट ("$ इंडेंट)< $key$attr >\\ n ");
obj2xml ($ वैल, $ इंडेंट। "");
प्रिंट ("$ इंडेंट)\\ n ");
}
और प्रिंट ("$ इंडेंट)< $key$attr > $ वैल\\ n ");
}
}

// उदाहरण वस्तु
$ x -\u003e नाम -\u003e पहला \u003d "जॉन";
$ x -\u003e नाम -\u003e अंतिम \u003d "स्मिथ";
$ x -\u003e गिरफ्तारी ["फल"] \u003d "बन्नाना";
$ x -\u003e गिरफ्तारी ["वेज"] \u003d "गाजर";
$ y -\u003e ग्राहक \u003d $ x;
$ y -\u003e ग्राहक -\u003e __attr -\u003e id \u003d "176C4";

$ z \u003d get_defined_vars ();
obj2xml ($ z ["y"]);
?>
उत्पादन होगा:


जॉन
लोहार


bannana
गाजर

11 साल पहले

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

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

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

// अब दिए गए सरणी के माध्यम से मान को बदलने का प्रयास करें
$ परिभाषित_वार ["my_var"] \u003d "बार";

इको $ my_var, "\\ n";

?>

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

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

foreach ($ var_names $ var_name के रूप में)
{
$ परिभाषित_वार [$ var_name] \u003d & $ $ var_name;
}

?>

1 साल पहले

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

यह पता चला है कि यह हमेशा नहीं होता है, लेकिन कुछ मामलों में यह बेवजह दिखाई देगा।

Php -r "
क्लास टेस्ट (
सार्वजनिक कार्य () (var_dump (array_keys (get_defined_vars))); $ a \u003d 123;)
सार्वजनिक समारोह b () (var_dump (array_keys (get_defined_vars) ())। $; यह!)।
}
$ t \u003d नया परीक्षण ();
$ t-\u003e ();
$ टी-\u003e बी ();
"

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

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

1 साल पहले

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

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

सार्वजनिक समारोह x ($ a, $ b, $ c) (
$ कुंजी के रूप में foreach (array_keys (get_defined_vars) ())
अगर ($ कुंजी! \u003d\u003d "यह")
$ यह-\u003e y ($ ($ कुंजी));
}

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

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

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

आप $ $ $ कुंजी भी कर सकते हैं, लेकिन मैंने कभी भी ऐसा कोड नहीं देखा, जो कि भयानक नहीं था (डायनेमिक जहां डायनामिक "टी फायदेमंद" का उपयोग कर रहा है)।

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

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

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

चर बनाना

आप एक वैरिएबल में एक मान रख सकते हैं:

ऊपर दिए गए कोड में, हमने $ नेम वैरिएबल बनाया और इवान का मूल्य उसमें डाल दिया, फिर हमने $ आयु वैरिएबल बनाया और वैल्यू को 20 पर नियत किया।

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

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

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

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

1. परिवर्तनीय नाम $ प्रतीक से शुरू होता है।

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

परिवर्तनीय नाम केस संवेदी हैं। $ नाम और $ नाम अलग-अलग चर हैं।

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

आप उस चर को प्रदर्शित कर सकते हैं जिसका उपयोग हम पहले से ही जानते हैं।

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

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

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

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

एक चर के मूल्य की जाँच करना

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

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

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

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

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

भिन्नता हटाना

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

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

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

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

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

", $ शीर्षक,"", गूंज"

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

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

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

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

स्कोप क्या है?

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

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

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

विश्व स्तर पर जिन वेरिएबल्स को वैश्विक रूप से स्कोप किया जाता है, उन्हें ग्लोबल कहा जाता है, और जिन्हें स्थानीय रूप से स्कोप किया जाता है, उन्हें स्थानीय कहा जाता है।

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

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

हाय हैरी! $ GlobalName मान: "Zoe" $ स्थानीय नाम मान: ""

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

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

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

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

किसी फ़ंक्शन के अंदर वैश्विक चर एक्सेस करना

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

फंक्शन मायफंक्शन () (वैश्विक $ GlobalVariable; // वैश्विक चर $ GlobalVariable तक पहुंच)

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

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

"; वैश्विक $ GlobalName; गूंज" Hello $ GlobalName!
";) कहते हैंहेलो ();\u003e;

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

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

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

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

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

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

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

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

हाय फ्रेड!

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

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

";) कहते हैंहेलो (); // प्रिंट्स" हैलो, ज़ो! ";\u003e

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

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

यह ज्यादातर मामलों में महान काम करता है। इस तरह फ़ंक्शंस स्व-सम्\u200dमिलित होते हैं और हमेशा हर बार जब वे बुलाए जाते हैं तो वही कार्य करते हैं।

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

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

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

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


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

लेकिन, जब से $ numWidgets चर बनाया जाता है हर बार फ़ंक्शन को कहा जाता है, तो हमें निम्न परिणाम मिलेगा:

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

लेकिन एक स्थिर वैरिएबल का उपयोग करते हुए, हम एक फंक्शन कॉल से अगले में वैल्यू स्टोर कर सकते हैं:

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

स्क्रिप्ट अब अपेक्षित आउटपुट देगी:

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

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

बस इतना ही! PHP प्रलेखन की अक्सर जाँच करें।