Package home | Report new bug | New search | Development Roadmap Status: Open | Feedback | All | Closed Since Version 0.20.2

Bug #3303 Cannot tell Unserializer not to use tag names for class
Submitted: 2005-01-26 12:30 UTC Modified: 2005-02-12 10:21 UTC
From: scarpenter at allofe dot net Assigned: schst
Status: Closed Package: XML_Serializer
PHP Version: 4.3.9 OS: Redhat 8.0
Roadmaps: (Not assigned)    
Subscription  


 [2005-01-26 12:30 UTC] scarpenter at allofe dot net
Description: ------------ When using the option 'complexType' => 'object' the Unserialize will use the tag name for the class that is created from the data if the class exists. This is a cool feature. Problem is it can't be turned off and often tag names match preexisting classes that require arguments in their constructor thus causing a warning. An option to specify that stdClass is always used would make it possible to prevent this problem. Since this is prone to result in a warning at random(depending on the xml) perhaps it shouldn't even be the default behavior. Reproduce code: --------------- <? class state { var $arg1; function state($arg1) { $this->arg1 = $arg1; } } $xml_str = '<data><states><state><id>1</id></state><state><id>2</id></state></states></data>'; require_once 'XML/Unserializer.php'; $unserializer = new XML_Unserializer(array('parseAttributes'=>false, 'complexType'=>'object')); $status = $unserializer->unserialize($xml_str, $is_file=false); $data = $unserializer->getUnserializedData(); print_r($data); ?> Expected result: ---------------- stdClass Object ( [states] => stdClass Object ( [state] => Array ( [0] => stdClass Object ( [id] => 1 ) [1] => stdClass Object ( [id] => 2 ) ) ) ) Actual result: -------------- <br /> <b>Warning</b>: Missing argument 1 for state() in <b>/xdisk/devel/active/contentm_v2/scarpenter/wf_instances/wf_test.php</b> on line <b>4</b><br /> <br /> <b>Warning</b>: Missing argument 1 for state() in <b>/xdisk/devel/active/contentm_v2/scarpenter/wf_instances/wf_test.php</b> on line <b>4</b><br /> stdClass Object ( [states] => stdClass Object ( [state] => Array ( [0] => state Object ( [arg1] => [id] => 1 ) [1] => state Object ( [arg1] => [id] => 2 ) ) ) )

Comments

 [2005-02-12 10:21 UTC] schst
Thank you for your bug report. This issue has been fixed in the latest released version of the package, which you can download at http://pear.php.net/get/XML_Serializer