Re: Re: $this in an XML data handler ... in a class

From: Date: Wed, 03 Jul 2002 17:02:01 +0000
Subject: Re: Re: $this in an XML data handler ... in a class
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-105246@lists.php.net to get a copy of this message
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" <peter@jingo.com> > > Have a look at: > http://www.php.net/manual/en/function.xml-set-object.php > > xml_set_object($this->parser, &$this); > > > > "Clay Loveless" <clay@killersoft.com> wrote in message > news:B9481008.158BF%clay@killersoft.com... >> 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 >> > >

« previous php.general (#105246) next »