2012-11-29 20 views
12

get_defined_vars sta per (citazione):C'è un modo per ottenere variabili dichiarate dall'utente in PHP?

ritorno un array multidimensionale che contiene un elenco di tutte le variabili definite, essere loro ambiente, server o variabili definite dall'utente

bene, per il mio compito di debug, ho bisogno solo di quelli definiti dall'utente. C'è una funzione integrata o php?

EDIT: Ok non ho chiarito che cosa esattamente che cercavo, ecco piccolo esempio:

<?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

intendi definito dall'utente rispetto a dichiarato in una definizione di classe? – Ray

+0

cos'è una var definita dall'utente? uno che hai definito direttamente nei tuoi script? come potrebbe PHP dire tra quello e una var definita in qualche file esterno richiesto/incluso? –

+0

no, non sui vars della classe, ho bisogno di vars definiti in ambito globale –

risposta

7

Che ne dici di una piccola manipolazione della schiera?

$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

Questa risposta si adatta meglio alle mie esigenze. Grazie. –

+0

@Crisp Mancano alcune [variabili predefinite] (http://php.net/manual/en/reserved.variables.php). – eisberg

12

Sì, è possibile:

<?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)); 

tornerà:

array(1) { 
    ["b"]=> 
    int(1) 
} 
+0

cosa succederà con le variabili di sessione e le variabili che vengono inviate come $ _POST e così via? Mi piace la tua idea e quindi l'upvote –

+1

@EyalAlsheich Tutto ciò che viene definito prima di '$ a' (in questo esempio) verrà nascosto. $ _POST è definito prima dell'esecuzione di qualsiasi codice utente. Per le sessioni dipende se usi 'session_start();' o l'avvio automatico della sessione. – eisberg

+0

Questo è veramente pulito. La migliore risposta qui. – ankr

0

This sembra una soluzione interessante per il tuo problema:

<?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

Nasconde tutte le variabili definite dall'utente che iniziano con underscore e iniziano con GLOBALS. – eisberg

Problemi correlati