2012-11-29 6 views
12

get_defined_vars ist im Begriff, (Zitat):Gibt es eine Möglichkeit, Benutzer deklarierte Variablen in PHP zu bekommen?

Rückkehr ein mehrdimensionales Array mit einer Liste aller definierten Variablen enthält, ihnen Umgebung, Server oder benutzerdefinierte Variablen

gut sein, für meine Debugging-Aufgabe, brauche ich nur diese benutzerdefinierten. Gibt es PHP-Built-In oder Zusatzfunktion?

EDIT: Ok ich nicht gemacht habe klar, was genau ich war nach, hier ist kleines Beispiel:

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

meinen Sie benutzerdefiniert vs. in einer Klassendefinition deklariert? – Ray

+0

Was ist eine benutzerdefinierte var? eine, die Sie direkt in Ihren eigenen Skripten definiert haben? Wie könnte PHP zwischen diesem und einem in einer externen Datei definierten var unterscheiden? –

+0

Nein, nicht über Klasse Vars, ich brauche Vars im globalen Gültigkeitsbereich definiert –

Antwort

7

Wie wäre es mit einer kleinen Array-Manipulation?

$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

Diese Antwort passt am besten zu meinen Bedürfnissen. Vielen Dank. –

+0

@Crisp Sie vermissen einige [vordefinierte Variablen] (http://php.net/manual/en/reserved.variables.php). – eisberg

12

Ja, Sie können:

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

Wir kommen wieder:

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

Was passiert mit Sitzungsvariablen und Variablen, die wie $ _POST und so weiter gesendet werden ?, ich mag deine Idee, daher die Upvote –

+1

@EyalAlsheich Alles, was vor '$ a' definiert ist (in diesem Beispiel) wird ausgeblendet. $ _POST ist vor der Ausführung eines Benutzercodes definiert. Für Sitzungen hängt es davon ab, ob Sie 'session_start();' oder den automatischen Start der Sitzung verwenden. – eisberg

+0

Das ist wirklich nett. Beste Antwort hier. – ankr

0

This scheint eine coole Lösung für Ihr Problem:

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

Dies wird alle benutzerdefinierten Variablen ausblenden, beginnend mit Unterstrich und beginnend mit GLOBALS. – eisberg

Verwandte Themen