2011-06-27 84 views
0

每次調用start()函數時,該函數總是隻輸出一個選項卡。當它輸出$ tabs的值時,它從start()和start()顯示時總是1,當從stop()顯示時。爲什麼$ tabs不是全局的?PHP XML解析:變量在每次使用時都會重置?

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

回答

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 />"; 
} 
+0

我明白了。謝謝! –

1

你在你的start()和stop()函數忘記

global $tabs; 

。 PHP變量只是「本地」的,除非你明確標記它們是全局的。

相關問題