note 40865 rejected from ref.xml by cece

From: Date: Wed, 17 Mar 2004 14:40:06 +0000
Subject: note 40865 rejected from ref.xml by cece
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-66960@lists.php.net to get a copy of this message
Note Submitter: mowlux ---- I ve spotted a strange behaviour with this class : class xml_reader{ var $entity_stack; var $test; function xml_reader(){ $this->entity_stack=array(); $this->test=0; } function create_array_entity($name){ $nb=count($this->entity_stack); print "$this->test $nb-e_start : \"$name\"<br>"; $this->test++; array_push($this->entity_stack,$name); //print_r($this->entity_stack); print "$this<br>"; } function get_array_entity($name){ $this->test--; array_pop($this->entity_stack); $nb=count($this->entity_stack); print "$this->test $nb-e_end : \"$name\"<br>"; //print_r($this->entity_stack); print "$this<br>"; } function elementStart($parser, $name, $attrs){ $this->create_array_entity($name); } function elementEnd($parser, $name){ $this->get_array_entity($name); } function read_file($filename){ $xml_parser = xml_parser_create(); $start_handler_func=array($this,"elementStart"); $end_handler_func=array($this,"elementEnd"); xml_set_element_handler($xml_parser ,$start_handler_func ,$end_handler_func); if (!($fp = fopen($filename, "r"))) { die("Impossible d'ouvrir le fichier XML"); } while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("erreur XML : %s à la ligne %d" ,xml_error_string(xml_get_error_code($xml_parser)) ,xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); } } The problem is that theses lines (using the array syntax for handling functions) seems to duplicate or something the object, because the object vars ($entity_stack and $test) are different references in the function calls of the parser. (Modification of a value in one A function isn't accessible in the other B function, but remain in A when called again...) $start_handler_func=array($this,"elementStart"); $end_handler_func=array($this,"elementEnd"); xml_set_element_handler($xml_parser ,$start_handler_func ,$end_handler_func);

« previous php.notes (#66960) next »