Bug #12959 Updated: XML methods don't have $this set!
| From: | slowbyte at hot dot ee | Date: | Sat, 25 Aug 2001 13:47:51 +0000 |
| Subject: | Bug #12959 Updated: XML methods don't have $this set! | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-64309@lists.php.net to get a copy of this message | ||
ID: 12959
User updated by: slowbyte@hot.ee
Reported By: slowbyte@hot.ee
Old Status: Bogus
Status: Open
Bug Type: XML related
Operating System: Win98SE/Linux
PHP Version: 4.0.6
New Comment:
I noticed this bug is reported in several ways here (I didn't see these before posting, the 10
bug on 1 page limit, oops :). I hope this demonstrates this bug is not yet solved, and very
annoying. (The script should also be clearer than others)
Previous Comments:
------------------------------------------------------------------------
[2001-08-25 09:47:02] jmoore@php.net
Ask on the PHP-GEneral mailling list, you are trying to use $this outside of a class so it does not
work.
- James
------------------------------------------------------------------------
[2001-08-25 09:41:10] slowbyte@hot.ee
When you use XML methods in a script, $this doesn't get set or is buggy. That means you
can't use instance variables or methods of that object.
When you run the following script you only get SE,SE,EE,EE but the variables content and instancevar
aren't set. The only solution I could think of is that $this points to a wrong object, not the
object that the XML methods are called in.
Example script:
<?
class ContentParser
{
var $parser, $content = "";
var $instancevar;
function ContentParser()
{
$this->parser = xml_parser_create();
xml_set_object($this->parser, &$this);
xml_set_element_handler($this->parser, "start_element",
"end_element");
xml_set_character_data_handler($this->parser, "character_data");
xml_set_processing_instruction_handler($this->parser,
"processing_instruction");
}
function parse_text ($data)
{
return xml_parse ($this->parser, $data, true);
}
function add_content($text)
{
$this->content .= $text;
}
function processing_instruction($parser, $target, $data)
{
}
function start_element($parser, $name, $attribs)
{
echo "SE<br>";
$this->add_content("Start_element $name<br>");
$this->instancevar = "I should be set!!!";
}
function end_element($parser, $name)
{
echo "EE<br>";
$this->add_content("End element $name<br>");
}
function character_data($parser, $data)
{
$this->add_content($data);
}
}
$c = new ContentParser();
$c->parse_text("<document><paragraph>Well this doesn't work.
Bug!</paragraph></document>");
echo $c->content; // Zip. No bonus.
echo $c->instancevar;
?>
Am I doing something wrong or is this really a bug?
------------------------------------------------------------------------
Edit this bug report at http://bugs.php.net/?id=12959&edit=1