Bug #79528 [Nab->ReO]: Different object of the same xml between 7.4.5 and 7.4.4

From: Date: Thu, 30 Apr 2020 22:20:45 +0000
Subject: Bug #79528 [Nab->ReO]: Different object of the same xml between 7.4.5 and 7.4.4
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-226858@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=79528&edit=1 ID: 79528 Updated by: nikic@php.net Reported by: roke22 at gmail dot com Summary: Different object of the same xml between 7.4.5 and 7.4.4 -Status: Not a bug +Status: Re-Opened Type: Bug Package: SimpleXML related Operating System: Linux PHP Version: 7.4.5 -Assigned To: +Assigned To: cmb Block user comment: N Private report: N New Comment: @cmb: Looks like this had some unintended effects. Previous Comments: ------------------------------------------------------------------------ [2020-04-30 21:55:53] ttijhof at wikimedia dot org This changed has caused observable changes in user-land code in a bug release, which seems like something that should not happen. An isolated test case exists at https://3v4l.org/HtN9R. This is not debugging output, these are run-time return values. And it doesn't even rely on reflection or something hacky like that. I would expect a breaking change of this kind, where the API provides an entirely different return value (string vs array of objects), to be something that happens in a major release like PHP 8.0, not in a minor release, and most definitely not in a patch release to PHP 7.3 or PHP 7.4. Even then I would think such change, which is hard to support both versions of, would probably benefit from a feature flag, run-time option, or some other method name so that there is a deprecation notice and so that one can actually do a running migration. ------------------------------------------------------------------------ [2020-04-27 07:53:59] nikic@php.net To be clear, this should have changed only debug output, not anything else. ------------------------------------------------------------------------ [2020-04-27 07:48:03] requinix@php.net The change in behavior is a result of a bug fix - see bug #61597. The problem was that nodes with attributes were being treated as strings in cases that they should not have been. Your example is one such case: the <value3> elements have attributes so simply treating them as strings would lose that data. ------------------------------------------------------------------------ [2020-04-27 07:38:09] roke22 at gmail dot com Description: ------------ --- From manual page: https://php.net/function.simplexml-load-string --- We got different object when we read the same xml with php 7.4.4 and 7.4.5. In php 7.4.4 we got a SimpleXMLElement object with an array. In php 7.4.5 we got a SimpleXMLElement object with SimpleXMLElement objects. This cause different behaviour on the same code. I think that in minor changes this have to be the same result. Test script: --------------- <?php $resultado = simplexml_load_string("<value1><value2><value3 valueinside='1'>17321</value3><value3 valueinside='2'>17321</value3></value2></value1>"); var_dump($resultado); Expected result: ---------------- We expect the same resulto on both versions. Actual result: -------------- root@400e641ac608:/# php --version PHP 7.4.5 (cli) (built: Apr 17 2020 11:29:12) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Xdebug v2.9.4, Copyright (c) 2002-2020, by Derick Rethans root@400e641ac608:/# cd /var/www/html/ root@400e641ac608:/var/www/html# php prueba.php /var/www/html/prueba.php:3: class SimpleXMLElement#1 (1) { public $value2 => class SimpleXMLElement#2 (1) { public $value3 => array(2) { [0] => class SimpleXMLElement#3 (2) { ... } [1] => class SimpleXMLElement#4 (2) { ... } } } } root@757c3e5e6b91:/var/www/html# php --version PHP 7.4.4 (cli) (built: Apr 16 2020 15:22:19) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Xdebug v2.9.4, Copyright (c) 2002-2020, by Derick Rethans root@757c3e5e6b91:/var/www/html# php prueba.php /var/www/html/prueba.php:3: class SimpleXMLElement#1 (1) { public $value2 => class SimpleXMLElement#2 (1) { public $value3 => array(2) { [0] => string(5) "17321" [1] => string(5) "17321" } } } ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=79528&edit=1

« previous php.bugs (#226858) next »