Разбор PHP XML: переменная сбрасывается каждый раз, когда она используется? - PullRequest
0 голосов
/ 28 июня 2011

Эта функция всегда выводит ровно одну вкладку каждый раз, когда вызывает функцию start (). Когда он выводит значение $ tabs, он всегда равен 1 при отображении из start () и -1 при отображении из stop (). Почему $ tabs не являются глобальными?

$parser = xml_parser_create();
$tabs = 0;

function start($parser, $element_name, $element_attrs) {
    $tabs = $tabs + 1;
    echo str_repeat("\t", $tabs).$element_name.": ";
}
function stop($parser, $element_name) {
    $tabs = $tabs - 1;
    echo "<br />";
}
function char($parser, $data) {
    echo $data;
}
xml_set_element_handler($parser, "start", "stop");
xml_set_character_data_handler($parser, "char");

$fp = fopen("$SignedRequest", "r");

while ($data = fread($fp, 4096)) {
    xml_parse($parser, $data, feof($fp)) or die (sprintf("XML Error: %s at line %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser)));
}

xml_parser_free($parser);

Ответы [ 2 ]

1 голос
/ 28 июня 2011

нет, это не так, в PHP нужно объявлять глобальные переменные, например:

function start($parser, $element_name, $element_attrs) {
global $tab;
    $tabs = $tabs + 1;
    echo str_repeat("\t", $tabs).$element_name.": ";
}

function stop($parser, $element_name) {
global $tab;
    $tabs = $tabs - 1;
    echo "<br />";
}
1 голос
/ 28 июня 2011

Вы забыли

global $tabs;

в функциях start () и stop ().Переменные PHP являются только «локальными», если вы явно не пометите их как глобальные.

...