2012-11-29 9 views
12

get_defined_vars (प्रशस्ति पत्र) के बारे में है:वहाँ एक रास्ता PHP में उपयोगकर्ता घोषित चर प्राप्त करने के लिए है?

वापसी एक बहुआयामी सरणी सभी निर्धारित वेरिएबल की सूची से युक्त, उन्हें पर्यावरण, सर्वर या उपयोगकर्ता-निर्धारित वेरिएबल

ठीक है, हो सकता है के लिए मेरे डिबगिंग कार्य, मुझे केवल उन उपयोगकर्ता-परिभाषित की आवश्यकता है। क्या php-built-in या पूरक फ़ंक्शन है?

संपादित करें:

<?php 
/* 
this script is included, and I don't have info 
about how many scripts are 'above' and 'bellow' this*/ 


//I'm at line 133 
$user_defined_vars = get_user_defined_vars(); 
//$user_defined_vars should now be array of names of user-defined variables 
//what is the definition of get_user_defined_vars()? 

?> 
+0

क्या आपका मतलब कक्षा परिभाषा में घोषित उपयोगकर्ता परिभाषित बनाम है? – Ray

+0

उपयोगकर्ता परिभाषित वर क्या है? एक जिसे आपने सीधे अपनी स्क्रिप्ट में परिभाषित किया है? PHP को उस बाहरी और बाहरी फ़ाइल में परिभाषित एक var के बीच कैसे बताया जा सकता है जिसमें आपको आवश्यक/शामिल किया गया है? –

+0

नहीं, कक्षा के युद्धों के बारे में नहीं, मुझे वैश्विक क्षेत्र में परिभाषित वर्णों की आवश्यकता है –

उत्तर

7

थोड़ा सरणी हेरफेर के बारे में कैसे?

$testVar = 'foo'; 
// list of keys to ignore (including the name of this variable) 
$ignore = array('GLOBALS', '_FILES', '_COOKIE', '_POST', '_GET', '_SERVER', '_ENV', 'ignore'); 
// diff the ignore list as keys after merging any missing ones with the defined list 
$vars = array_diff_key(get_defined_vars() + array_flip($ignore), array_flip($ignore)); 
// should be left with the user defined var(s) (in this case $testVar) 
var_dump($vars); 

// Result: 
array(1) { 
    ["testVar"]=>string(3) "foo" 
} 
+0

इस उत्तर सबसे अच्छा मेरी जरूरतों फिट बैठता है। धन्यवाद। –

+0

@ क्रिप्प आप कुछ [पूर्वनिर्धारित चर] (http://php.net/manual/en/reserved.variables.php) खो रहे हैं। – eisberg

12

हाँ, आप कर सकते हैं::

<?php 
// Start 
$a = count(get_defined_vars()); 

/* Your script goes here */ 
$b = 1; 

// End 
$c = get_defined_vars(); 
var_dump(array_slice($c, $a + 1)); 

वापसी करेंगे:

array(1) { 
    ["b"]=> 
    int(1) 
} 
ठीक है, मैं स्पष्ट नहीं किया था कि वास्तव में क्या मैं के बाद किया गया था, यहाँ थोड़ा उदाहरण है
+0

सत्र चर और चर के साथ क्या होगा जो $ _POST जैसे भेजे गए हैं और इसी तरह ?, मुझे आपके विचार पसंद हैं हालांकि इस प्रकार अपवोट –

+1

@EyalAlsheich सबकुछ जो '$ a' (इस उदाहरण में) से पहले परिभाषित किया गया है, छुपाया जाएगा। किसी भी उपयोगकर्ता कोड के निष्पादन से पहले $ _POST परिभाषित किया गया है। सत्र के लिए यह निर्भर करता है कि आप 'session_start() का उपयोग करें;' या सत्र स्वत शुरू। – eisberg

+0

यह वास्तव में साफ है। यहां सबसे अच्छा जवाब है। – ankr

0

This आपकी समस्या के लिए एक शांत समाधान की तरह लगता है:

<?php 
// Var: String 
$var_string = 'A string'; 

// Var: Integer 
$var_int = 55; 

// Var: Boolean 
$var_boolean = (int)false; 



/** 
* GetUserDefinedVariables() 
* Return all the user defined variables 
* @param array $variables (Defined variables) 
* @return array $user_variables 
*/ 
function GetUserDefinedVariables($variables){; 
    if (!is_array($variables)) 
     return false; 

    $user_variables = array(); 

    foreach ($variables as $key => $value) 
     if ([email protected]_match('@(^_|^GLOBALS)@', $key)) 
      $user_variables[$key] = $value; 

     return $user_variables; 
} 


echo '<pre>'.print_r(
         GetUserDefinedVariables(
             get_defined_vars() 
               ), true).'</pre>'; 
?> 
+1

यह अंडरस्कोर से शुरू होने और ग्लोबल्स से शुरू होने वाले सभी उपयोगकर्ता परिभाषित चर को छुपाएगा। – eisberg

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