【问题标题】:PHP XML parsing: variable is reset every time it's used?PHP XML解析:每次使用时都会重置变量?
【发布时间】:2011-06-27 22:19:31
【问题描述】:

这个函数每次调用 start() 函数时总是输出一个标签。当它输出 $tabs 的值时,从 start() 显示时始终为 1,从 stop() 显示时始终为 -1。为什么 $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);

【问题讨论】:

    标签: php xml parsing xml-parsing


    【解决方案1】:

    不,不是,在 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 />";
    }
    

    【讨论】:

      【解决方案2】:

      你忘了

      global $tabs;
      

      在你的 start() 和 stop() 函数中。 PHP 变量仅是“本地”变量,除非您明确将它们标记为全局变量。

      【讨论】: