Подтвердить что ты не робот

Есть ли способ получить объявленные пользователем переменные в PHP?

get_defined_vars собирается (ссылка):

возвращает многомерный массив, содержащий список всех определенных переменных, будь то среда, сервер или пользовательские переменные

Ну, для моей задачи отладки мне нужны только те, которые определены пользователем. Есть ли встроенная или дополняющая функция php?

EDIT: Хорошо, я не дал понять, что именно я был после, вот небольшой пример:

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

?>
4b9b3361

Ответ 1

Как насчет небольшой манипуляции с массивами?

$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"
}

Ответ 2

Да, вы можете:

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

Ответ 3

Это кажется отличным решением вашей проблемы:

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