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

2002-07-04 Thread Peter Clarke

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

2002-07-03 Thread Peter Clarke


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

2002-07-03 Thread Clay Loveless

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