Re: [PHP] Re: $this in an XML data handler ... in a class
I hadn't noticed that. My php.ini was set to on, changing it to off gave the warning. Having changed: xml_set_object($this-parser,$this); to: xml_set_object($this-parser,$this); Stops the warning and the parser works fine. This is the class I'm using and it works fine: class parse_words_xml { var $words; function parse_words_xml($xml_data) { $this-words = array(); $this-parser = xml_parser_create(); xml_parser_set_option($this-parser, XML_OPTION_CASE_FOLDING, false); xml_set_element_handler($this-parser,tag_open,tag_close); xml_set_character_data_handler($this-parser,cdata); $this-parse($xml_data); } function parse($xml_data) { xml_set_object($this-parser,$this); reset ($xml_data); while (list (, $data) = each ($xml_data)) { if (!xml_parse($this-parser, $data)) { die(sprintf( XML error: %s at line %d\n\n, xml_error_string(xml_get_error_code($this-parser)), xml_get_current_line_number($this-parser))); } } } function tag_open($parser,$tag,$attributes) { $this-current_tag = $tag; switch($tag){ case 'Word': $this-id = $attributes['id']; $this-words[$attributes['id']] = 1; break; default: break; } } function cdata($parser,$cdata) { $this-temp = $cdata; } function tag_close($parser,$tag) { switch($tag){ case 'Word': $this-words[$this-id] = $this-temp; $this-temp = ''; break; default: break; } } } Clay Loveless [EMAIL PROTECTED] wrote in message [EMAIL PROTECTED]">news:[EMAIL PROTECTED]... Unfortunately, the xml_set_object function does not work to solve this problem. I tried using it, and my results were the same as they were when I was not using it. [I found that the array($this, 'function_name') method instead of 'string function_name' for the xml_set_*_handler functions worked just as well, only without this Warning message one gets from PHP 4.2.1 upon using xml_set_object($this-parser, $this): PHP Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of xml_set_object(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer.] Still searching for an answer on this one ... Thanks, -Clay Peter Clarke [EMAIL PROTECTED] Have a look at: http://www.php.net/manual/en/function.xml-set-object.php xml_set_object($this-parser, $this); Clay Loveless [EMAIL PROTECTED] wrote in message [EMAIL PROTECTED]">news:[EMAIL PROTECTED]... Here's a brain-bender ... At least it is for me at the moment. : ) When I use an XML parser inside a class, the xml_*_handler functions aren't recognizing $this- variables. I can kind of see why ... But would like it to work anyway. : ) Here's an example: class Blah { var $xmlparser; var $current_element; // ... function _parseXML($data) { $this-xmlparser = xml_parser_create(); xml_set_element_handler( $this-xmlparser, array($this,_xml_start_element), array($this,_xml_end_element)); xml_set_character_data_handler( $this-xmlparser, array($this,_xml_character_data)); xml_parse($this-xmlparser, $data); xml_parser_free($this-xmlparser); } function _xml_start_element($p, $e_name, $e_attributes) { $this-current_element = $e_name; } function _xml_end_element($p, $e_name) { // ... } function _xml_character_data($p, $data) { echo element is: .$this-current_element.\n; echo data is: $data\n; } } // end of class Blah When this XML parser gets called from within the Blah class, the element is: portion of _xml_character_data comes out blank! This sort of makes sense, because the callback functions are children of the xml_parser_create parent ... But should that make the children ignorant of the grandparent variables referred to by $this-varname? I hope this makes sense ... Has anyone else encountered this sort of problem? I'm an old hat at PHP, but am relatively new to both XML parsing and writing my own classes. Thanks, Clay -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP] Re: $this in an XML data handler ... in a class
Clay Loveless [EMAIL PROTECTED] wrote in message [EMAIL PROTECTED]">news:[EMAIL PROTECTED]... Here's a brain-bender ... At least it is for me at the moment. : ) When I use an XML parser inside a class, the xml_*_handler functions aren't recognizing $this- variables. I can kind of see why ... But would like it to work anyway. : ) Here's an example: class Blah { var $xmlparser; var $current_element; // ... function _parseXML($data) { $this-xmlparser = xml_parser_create(); xml_set_element_handler( $this-xmlparser, array($this,_xml_start_element), array($this,_xml_end_element)); xml_set_character_data_handler( $this-xmlparser, array($this,_xml_character_data)); xml_parse($this-xmlparser, $data); xml_parser_free($this-xmlparser); } function _xml_start_element($p, $e_name, $e_attributes) { $this-current_element = $e_name; } function _xml_end_element($p, $e_name) { // ... } function _xml_character_data($p, $data) { echo element is: .$this-current_element.\n; echo data is: $data\n; } } // end of class Blah When this XML parser gets called from within the Blah class, the element is: portion of _xml_character_data comes out blank! This sort of makes sense, because the callback functions are children of the xml_parser_create parent ... But should that make the children ignorant of the grandparent variables referred to by $this-varname? I hope this makes sense ... Has anyone else encountered this sort of problem? I'm an old hat at PHP, but am relatively new to both XML parsing and writing my own classes. Thanks, Clay Have a look at: http://www.php.net/manual/en/function.xml-set-object.php xml_set_object($this-parser, $this); -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] Re: $this in an XML data handler ... in a class
Unfortunately, the xml_set_object function does not work to solve this problem. I tried using it, and my results were the same as they were when I was not using it. [I found that the array($this, 'function_name') method instead of 'string function_name' for the xml_set_*_handler functions worked just as well, only without this Warning message one gets from PHP 4.2.1 upon using xml_set_object($this-parser, $this): PHP Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of xml_set_object(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer.] Still searching for an answer on this one ... Thanks, -Clay Peter Clarke [EMAIL PROTECTED] Have a look at: http://www.php.net/manual/en/function.xml-set-object.php xml_set_object($this-parser, $this); Clay Loveless [EMAIL PROTECTED] wrote in message [EMAIL PROTECTED]">news:[EMAIL PROTECTED]... Here's a brain-bender ... At least it is for me at the moment. : ) When I use an XML parser inside a class, the xml_*_handler functions aren't recognizing $this- variables. I can kind of see why ... But would like it to work anyway. : ) Here's an example: class Blah { var $xmlparser; var $current_element; // ... function _parseXML($data) { $this-xmlparser = xml_parser_create(); xml_set_element_handler( $this-xmlparser, array($this,_xml_start_element), array($this,_xml_end_element)); xml_set_character_data_handler( $this-xmlparser, array($this,_xml_character_data)); xml_parse($this-xmlparser, $data); xml_parser_free($this-xmlparser); } function _xml_start_element($p, $e_name, $e_attributes) { $this-current_element = $e_name; } function _xml_end_element($p, $e_name) { // ... } function _xml_character_data($p, $data) { echo element is: .$this-current_element.\n; echo data is: $data\n; } } // end of class Blah When this XML parser gets called from within the Blah class, the element is: portion of _xml_character_data comes out blank! This sort of makes sense, because the callback functions are children of the xml_parser_create parent ... But should that make the children ignorant of the grandparent variables referred to by $this-varname? I hope this makes sense ... Has anyone else encountered this sort of problem? I'm an old hat at PHP, but am relatively new to both XML parsing and writing my own classes. Thanks, Clay -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php