13

get_defined_varsはもうすぐです (引用):

環境変数、サーバー変数、ユーザー定義変数など、すべての定義済み変数のリストを含む多次元配列を返します

さて、私のデバッグ タスクには、ユーザー定義のものだけが必要です。php組み込みや補足機能はありますか?

編集:わかりました、正確に何を求めていたのかを明確にしませんでした。ここに少し例を示します:

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

?>
4

3 に答える 3

17

はい、できます:

<?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)
}
于 2012-11-29T15:24:57.330 に答える
9

ちょっとした配列操作はどうですか?

$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"
}
于 2012-11-29T16:10:44.540 に答える
0

これはあなたの問題に対するクールな解決策のようです:

<?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 (!@preg_match('@(^_|^GLOBALS)@', $key))
            $user_variables[$key] = $value;

        return $user_variables;
}


echo '<pre>'.print_r(
                        GetUserDefinedVariables(
                                        get_defined_vars()
                                                ), true).'</pre>';
?>
于 2012-11-29T15:26:31.607 に答える