Edit report at https://bugs.php.net/bug.php?id=62717&edit=1
ID: 62717 Comment by: ferca23 at gmail dot com Reported by: php at sebastianmendel dot de Summary: BC: in PHP 5.4 empty() reports true for simplexmlelement Status: Assigned Type: Bug Package: SimpleXML related PHP Version: 5.4.5 Assigned To: acurioso Block user comment: N Private report: N New Comment: I don't know if is exactly the same bug, but I have a similar problem. The empty function is returning true when accessing the sub-elements using the main object, and is returning false when accessing the sub-elements using the variable containing the sub-element. Example script: $xmlstr = '<?xml version="1.0" standalone="yes"?> <movies> <movie> <title></title> </movie> </movies>'; $movies = new SimpleXMLElement($xmlstr); $subelement = $movies->movie->title; echo "Accesing normal: " . PHP_EOL; echo var_dump($movies->movie->title) . PHP_EOL; echo var_dump(empty($movies->movie->title)) . PHP_EOL; echo "Accesing subelement: " . PHP_EOL; echo var_dump($subelement) . PHP_EOL; echo var_dump(empty($subelement)) . PHP_EOL; Previous Comments: ------------------------------------------------------------------------ [2012-12-12 14:22:29] larue...@php.net hey, acurioso, do you have time to look at this? I assume this is introduced in https://github.com/php/php-src/commit/1e3b32c7 thanks ------------------------------------------------------------------------ [2012-12-12 11:47:07] jozef at react dot com This bug was introduced in 5.4.0, as can be seen on: http://3v4l.org/MEL9Y for the following test: $string = <<<XML <a> <b>success</b> </a> XML; $xml = new SimpleXMLElement($string); $result = $xml->xpath('/a/b'); foreach ($result as $r) { if (!empty($r)) { print_r((string)$r); } else { echo 'failure'; } } ------------------------------------------------------------------------ [2012-08-01 14:37:54] php at sebastianmendel dot de Description: ------------ When laoding XML into SimpleXMLElement and iterating with ->children() empty() reports true for SimpleXMLElement objects. In PHP 5.3.16 empty() returns false. In PHP 5.4.5 empty() returns true. Test script: --------------- $xml = <<<EOT <?xml version="1.0" ?> <Y><X>6098881</X></Y> EOT; $sxml = new SimpleXMLElement($xml); foreach ($sxml->children() as $xmlKey => $xmlNode) { var_dump( empty($xmlNode), (string) $xmlNode, $xmlNode->asxml() ); } $xmlNode = new SimpleXMLElement('<X>501936634a721</X>'); var_dump( empty($xmlNode), (string) $xmlNode, $xmlNode->asxml() ); Expected result: ---------------- bool(false) string(7) "6098881" string(14) "<X>6098881</X>" bool(false) string(13) "501936634a721" string(43) "<?xml version="1.0"?> <X>501936634a721</X> " Actual result: -------------- bool(true) string(7) "6098881" string(14) "<X>6098881</X>" bool(false) string(13) "501936634a721" string(43) "<?xml version="1.0"?>\n<X>501936634a721</X>\n" ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=62717&edit=1