PHP में वेरिएबल. PHP वेरिएबल्स के साथ विंडोज ऑपरेशंस में सभी पर्यावरण वेरिएबल्स के मान कैसे प्रदर्शित करें

💖क्या आपको यह पसंद है?लिंक को अपने दोस्तों के साथ साझा करें

php में वेरिएबल- यह एक प्रकार का सूचना कंटेनर है जिसमें शामिल हो सकता है विभिन्न प्रकार केडेटा (पाठ, संख्याएँ, सरणियाँ, आदि)। सामान्य तौर पर, चर आपको उनमें निर्दिष्ट जानकारी बनाने, संग्रहीत करने, बदलने और बाद में तुरंत उस तक पहुंचने की अनुमति देते हैं।

PHP में वेरिएबल कैसे बनाएं

प्रारंभ में, चर में चिह्न होता है $ (डॉलर) - एक चर का उपयोग करने का पदनाम, फिर अक्षर लैटिन वर्णमाला(ए से ज़ेड और छोटे और बड़े तक), अंत में मैं शामिल कर सकता हूं नंबर. शीर्षक में अंडरस्कोर का उपयोग करना भी संभव है (अंत में नहीं)।

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

$var
$चर
$वर्ष1945
$_चर
वेरिएबल्स को नाम कैसे न दें:

$1 - इसमें केवल संख्याएँ शामिल हैं
$1var - आप एक संख्या के साथ एक चर नाम शुरू नहीं कर सकते
$/var - अतिरिक्त वर्णों में से, केवल अंडरस्कोर की अनुमति है _
$variable - PHP दस्तावेज़ में सिरिलिक की अनुमति है, लेकिन अनुशंसित नहीं है
$var iable - रिक्त स्थान का उपयोग नहीं किया जा सकता

प्रत्येक चर को एक मान निर्दिष्ट किया गया है। चिन्ह का उपयोग मान निर्दिष्ट करने के लिए किया जाता है = (बराबर). स्क्रिप्ट प्रोसेसिंग के दौरान, विभिन्न स्थितियों के आधार पर एक वेरिएबल का मान बार-बार बदल सकता है।

$शहर = "मास्को"; // वेरिएबल $city को स्ट्रिंग (उद्धरण में) मान मास्को सौंपा गया था
$वर्ष = 1147; // और वेरिएबल $year को संख्यात्मक मान 1147 निर्दिष्ट किया गया था
?>

$नाम = "सिकंदर";
$नाम = "एलेक्सी";
प्रतिध्वनि "$नाम, $नाम"; // "अलेक्जेंडर, एलेक्सी" प्रिंट करेगा
?>

PHP वेरिएबल्स को प्रिंट करना

अलग से, आपको यह देखना चाहिए कि वेरिएबल का उपयोग करके कैसे प्रदर्शित किया जाए आउटपुट स्टेटमेंट, जिनके काम की हमने पिछले पाठ में PHP पेज बनाना जांच की थी। अनुमान संचालक. . नीचे मैं टिप्पणियों के साथ कई उदाहरणात्मक उदाहरण दूंगा।

// इस प्रकार हम वेरिएबल्स का मान निर्धारित करते हैं
$name1 = "एलेक्सी";
$name2 = "सिकंदर";

// आउटपुट चर
प्रतिध्वनि $नाम2; // आउटपुट: अलेक्जेंडर
इको "नाम1 $नाम1 है"; // नाम1 एलेक्सी है

// सिंगल कोट्स का उपयोग करते समय, आउटपुट
// परिवर्तनीय नाम, मूल्य नहीं
इको "नाम1 $नाम1 है"; // आउटपुट होगा: name1 $name1 है

// आप बस चर के मान प्रदर्शित कर सकते हैं
प्रतिध्वनि $नाम1; // एलेक्सी
प्रतिध्वनि $नाम1,$नाम2; // एलेक्सी अलेक्जेंडर
प्रतिध्वनि $नाम1।" ".$नाम2; // एलेक्सी अलेक्जेंडर
इको "$name1, $name2"; // एलेक्सी, अलेक्जेंडर

गूंज<<यह आउटपुट के लिए "यहां दस्तावेज़" सिंटैक्स का उपयोग करता है
$variable परिवर्तनीय प्रतिस्थापन के साथ कई पंक्तियाँ।
अंत;

PHP वेरिएबल्स के साथ संचालन

PHP में अंकगणितीय संचालन
संख्यात्मक मानों के मामले में, आप अंकगणितीय ऑपरेशन कर सकते हैं: जोड़, घटाव, गुणा, इत्यादि।

-$ए(नकारात्मक) $a का चिह्न बदलें।
$ए + $बी(अतिरिक्त) $a और $b का योग।
$ए - $बी(घटाना) $a और $b का अंतर।
$ए * $बी(गुणा) $a और $b का गुणनफल।
$ए / $बी(विभाजन) $a के भागफल को $b से विभाजित किया जाता है।
$ए % $बी(मॉड्यूलो डिवीजन) जब $a को $b से विभाजित किया जाता है तो पूर्णांक शेष बचता है।
आइए उदाहरण देखें

$ए = 2; // ध्यान दें कि संख्याओं के मामले में, उद्धरण चिह्नों का उपयोग नहीं किया जाता है
$बी = 3; // ध्यान दें कि संख्याओं के मामले में, उद्धरण चिह्नों का उपयोग नहीं किया जाता है

$परिणाम = $ए + $बी; // वेरिएबल जोड़ें
प्रतिध्वनि $परिणाम; //5 प्रिंट करेगा

$परिणाम = $बी - $ए; // वेरिएबल जोड़ें
प्रतिध्वनि $परिणाम; // 1 प्रिंट करेगा

PHP में इंक्रीमेंट और डिक्रीमेंट ऑपरेशन
ये ऑपरेशन मुख्य रूप से चक्रों का निर्माण करते समय उपयोगी होंगे, जिसके बारे में हम थोड़ी देर बाद बात करेंगे।
उपसर्ग- ऑपरेटर वेरिएबल से पहले लिखे गए हैं ( --$ए; +$ए). परिवर्तन से पहले वेरिएबल का मान लौटाएँ।
पोस्टफ़िक्स- वेरिएबल के बाद लिखे गए ऑपरेटर ( $ए--; $ए--). परिवर्तनों के साथ एक चर का मान लौटाएँ।
वेतन वृद्धि- मूल्य में वृद्धि.
घटती-घटता मूल्य.

+$एउपसर्ग वृद्धि. $a को एक-एक करके बढ़ाता है और $a का मान लौटाता है।
$a++पोस्टफ़िक्स वृद्धि. $a का मान लौटाता है और फिर $a को एक-एक करके बढ़ाता है।
--$एउपसर्ग घटाव. $a को एक-एक करके घटाता है और $a का मान लौटाता है।
$ए--पोस्टफिक्स कमी. $a का मान लौटाता है और फिर $a को एक-एक करके घटाता है।
प्रतिध्वनि"

पोस्टफ़िक्स वृद्धि

";
$ए = 5;
प्रतिध्वनि "5 होना चाहिए:"। $a++ . "\एन";

प्रतिध्वनि"

उपसर्ग वृद्धि

";
$ए = 5;
प्रतिध्वनि "6 होना चाहिए:"। +$ए. "\एन";
प्रतिध्वनि "6 होना चाहिए:"। $ए . "\एन";

प्रतिध्वनि"

पोस्टफिक्स कमी

";
$ए = 5;
प्रतिध्वनि "5 होना चाहिए:"। $ए-- . "\एन";

प्रतिध्वनि"

उपसर्ग घटाव

";
$ए = 5;
इको "4 होना चाहिए:"। --$a . "\एन";
इको "4 होना चाहिए:"। $ए . "\एन";
?>

PHP में असाइनमेंट संचालन
मूल संचालिकाकी तरह लगता है = . पहली नज़र में ऐसा लग सकता है कि यह बराबर ऑपरेटर है। वास्तव में यह सच नहीं है। वास्तव में, असाइनमेंट ऑपरेटर का अर्थ है कि बायां ऑपरेंड सही अभिव्यक्ति का मान लेता है (अर्थात, यह परिणामी मान द्वारा निर्धारित किया जाता है)। संयुक्त संचालक- ये ऐसे ऑपरेटर हैं जो आपको बाद के संचालन के लिए चर के पिछले मानों का उपयोग करने की अनुमति देते हैं (एक स्ट्रिंग चर में जोड़ें (पाठ के साथ) या संख्यात्मक मान जोड़ें)।

$ए = ($बी = 2) + 4; // परिणाम: $a को 6 पर सेट किया गया है, वेरिएबल $b को 2 असाइन किया गया है।

$ए = 2;
$ए += 3; // $a को 5 पर सेट करता है, लिखने के समान: $a = $a + 3;
$बी = "हैलो";
$बी.= "शांति!"; // $b को स्ट्रिंग "हैलो वर्ल्ड!" पर सेट करता है, जैसे $b = $b । "वहाँ!";

वे भी हैं तुलना संचालनऔर पहेली, लेकिन हम उनके बारे में निम्नलिखित पाठों में बात करेंगे। मैं कोशिश करूंगा कि तुरंत बड़ी मात्रा में जानकारी देकर आपको डराऊं नहीं!)

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

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

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

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

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

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

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

इको %systemroot%

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

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

13 साल पहले

सावधान रहने योग्य एक छोटी सी बात:

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

सरणी
[ग्लोबल्स] => सरणी
[ग्लोबल्स] => सरणी
*पुनरावृत्ति*
[ _POST ] => सरणी()
[ _प्राप्त करें ] => सारणी()
[ _कुकी ] => सरणी()
[ _फ़ाइलें ] => सरणी()
)

[ _POST ] => सरणी()
[ _प्राप्त करें ] => सारणी()
[ _कुकी ] => सरणी()
[ _फ़ाइलें ] => सरणी()

)
?>

ध्यान दें कि $_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);

प्रतिध्वनि"

"
;
print_r($vars);
प्रतिध्वनि"
" ;
?>

15 साल पहले

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

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

// "get_Defined_vars" द्वारा लौटाई गई कुंजियों के लिए एक अनदेखा सूची बनाएं।
// उदाहरण के लिए, HTTP_POST_VARS, HTTP_GET_VARS और अन्य हैं
// अनावश्यक (_POST, _GET के समान)
// वे संस्करण भी शामिल करें जिन्हें आप सुरक्षा कारणों से अनदेखा करना चाहते हैं - अर्थात PHPSESSID.
$ignorelist =array('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($link);
अगर($sql_error )(
$संदेश .= "\nMysql संदेश:\n"। mysql_error($लिंक);
}
// MySQL समाप्त करें

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

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

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

17 साल पहले

Get_Defined_vars ऑब्जेक्ट को XML में बदलने की सरल दिनचर्या।

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

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

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


जॉन
लोहार


केला
गाजर

11 साल पहले

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

// एक वेरिएबल को परिभाषित करें
$my_var = "foo" ;

// परिभाषित चर की हमारी सूची प्राप्त करें
$Defined_vars = get_Defined_vars();

// अब लौटाए गए सरणी के माध्यम से मान बदलने का प्रयास करें
$Defined_vars ["my_var" ] = "बार" ;

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

?>

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

$Defined_vars = array();
$var_names = array_keys(get_Defined_vars());

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

?>

1 साल पहले

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

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

पीएचपी -आर "
क्लास टेस्ट(
सार्वजनिक फ़ंक्शन a() (var_dump(array_keys(get_Defined_vars()));$a = 123;)
सार्वजनिक फ़ंक्शन b() (var_dump(array_keys(get_Defined_vars()));$this;)
}
$t = नया परीक्षण();
$t->a();
$t->b();
"

सारणी()
सरणी('यह')

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

1 साल पहले

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

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

सार्वजनिक फ़ंक्शन x($a, $b, $c) (
foreach(array_keys(get_Defined_vars()) $key के रूप में)
अगर($कुंजी !== "यह")
$this->y($($key));
}

सार्वजनिक फ़ंक्शन y(&$input) (
$इनपुट++;
}

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

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

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

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

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

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

दायरा क्या है?

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

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

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

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

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

"; )sayHello(); echo "\$globalName का मान: "$globalName"
"; प्रतिध्वनि "\$localName मान: "$localName"
"; ?>

हाय हैरी! $ग्लोबलनाम मान: "ज़ो" $लोकलनाम मान: ""

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

  • $वैश्विकनाम- यह वैश्विकचर
  • $स्थानीयनाम- यह स्थानीयएक वेरिएबल जो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 - इसमें सर्वर के बारे में जानकारी होती है, जैसे निष्पादित होने वाली स्क्रिप्ट का फ़ाइल नाम और ब्राउज़र का आईपी पता।
  • $_ENV - इसमें PHP को दिए गए पर्यावरण चर की एक सूची होती है, जैसे CGI चर।
उदाहरण के लिए, आप स्क्रिप्ट के अनुरोध URL स्ट्रिंग में संलग्न चर के मान प्राप्त करने और उन्हें पृष्ठ पर प्रदर्शित करने के लिए $_GET का उपयोग कर सकते हैं:

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

नमस्ते फ्रेड!

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

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

"; ) सेहेल्लो(); // प्रिंट "हैलो, ज़ोया!" ?>

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

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

अधिकांश मामलों में यह बढ़िया काम करता है. इस प्रकार, फ़ंक्शंस स्व-निहित होते हैं और जब भी उन्हें बुलाया जाता है तो वे हमेशा समान कार्य करते हैं।

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

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

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

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


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

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

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

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

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

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

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

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

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

13 साल पहले

सावधान रहने योग्य एक छोटी सी बात:

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

सरणी
[ग्लोबल्स] => सरणी
[ग्लोबल्स] => सरणी
*पुनरावृत्ति*
[ _POST ] => सरणी()
[ _प्राप्त करें ] => सारणी()
[ _कुकी ] => सरणी()
[ _फ़ाइलें ] => सरणी()
)

[ _POST ] => सरणी()
[ _प्राप्त करें ] => सारणी()
[ _कुकी ] => सरणी()
[ _फ़ाइलें ] => सरणी()

)
?>

ध्यान दें कि $_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);

प्रतिध्वनि"

"
;
print_r($vars);
प्रतिध्वनि"
" ;
?>

15 साल पहले

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

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

// "get_Defined_vars" द्वारा लौटाई गई कुंजियों के लिए एक अनदेखा सूची बनाएं।
// उदाहरण के लिए, HTTP_POST_VARS, HTTP_GET_VARS और अन्य हैं
// अनावश्यक (_POST, _GET के समान)
// वे संस्करण भी शामिल करें जिन्हें आप सुरक्षा कारणों से अनदेखा करना चाहते हैं - अर्थात PHPSESSID.
$ignorelist =array('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($link);
अगर($sql_error )(
$संदेश .= "\nMysql संदेश:\n"। mysql_error($लिंक);
}
// MySQL समाप्त करें

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

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

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

17 साल पहले

Get_Defined_vars ऑब्जेक्ट को XML में बदलने की सरल दिनचर्या।

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

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

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


जॉन
लोहार


केला
गाजर

11 साल पहले

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

// एक वेरिएबल को परिभाषित करें
$my_var = "foo" ;

// परिभाषित चर की हमारी सूची प्राप्त करें
$Defined_vars = get_Defined_vars();

// अब लौटाए गए सरणी के माध्यम से मान बदलने का प्रयास करें
$Defined_vars ["my_var" ] = "बार" ;

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

?>

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

$Defined_vars = array();
$var_names = array_keys(get_Defined_vars());

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

?>

1 साल पहले

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

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

पीएचपी -आर "
क्लास टेस्ट(
सार्वजनिक फ़ंक्शन a() (var_dump(array_keys(get_Defined_vars()));$a = 123;)
सार्वजनिक फ़ंक्शन b() (var_dump(array_keys(get_Defined_vars()));$this;)
}
$t = नया परीक्षण();
$t->a();
$t->b();
"

सारणी()
सरणी('यह')

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

1 साल पहले

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

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

सार्वजनिक फ़ंक्शन x($a, $b, $c) (
foreach(array_keys(get_Defined_vars()) $key के रूप में)
अगर($कुंजी !== "यह")
$this->y($($key));
}

सार्वजनिक फ़ंक्शन y(&$input) (
$इनपुट++;
}

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

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

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

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



मित्रों को बताओ