From: tdrpic at atdi dot us dot com
Operating system: Windows
PHP version: 7.0.8
Package: Variables related
Bug Type: Bug
Bug description:Using global var doesn't work while accessing SimpleXML element
Description:
------------
When making a variable global inside a function and using it as an index
to access a SimpleXML element, the variable's value is non-properly
handled and the XML's element is not returned (although you can
error_log the variable's value and type).
If you cast the variable to an integer, the XML's element is returned
(as expected) - see column #2.
Compare the results of the four different tests in the sample script.
Also:
- if you try the test removing the function call (to avoid declaring the
variable as global), the expected element is returned.
- using $GLOBALS also works returning the expected element.
- the output of the code is different between PHP 5.4.16 and PHP 7.0.8
Test script:
---------------
<?php
$tpnb = 5;
test();
die();
function test() {
global $tpnb;
error_log('$tpnb value: ' . $tpnb . ' type:' . gettype($tpnb));
$xmlStruct = <<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<templates>
<object type="obj_1" label="Label for object 1"></object>
<object type="obj_2" label="Label for object 2"></object>
<object type="obj_3" label="Label for object 3"></object>
<object type="obj_4" label="Label for object 4"></object>
<object type="obj_5" label="Label for object 5"></object>
<object type="obj_6" label="Label for object 6"></object>
<object type="obj_7" label="Label for object 7"></object>
<object type="obj_8" label="Label for object 8"></object>
<object type="obj_9" label="Label for object 9"></object>
<object type="obj_10" label="Label for object 10"></object>
</templates>
EOF;
$tplxml = simplexml_load_string($xmlStruct);
echo '<table border="1">';
echo '<tr>';
echo'<td style="vertical-align:top"><pre><h1>1:
$tpnb</h1>';
// try accessing "object" directly
print_r($tplxml->object[$tpnb]);
echo '</pre></td>';
echo'<td style="vertical-align:top"><pre><h1>2: (int)
$tpnb</h1>';
// try accessing "object" with an index cast
print_r($tplxml->object[(int) $tpnb]);
echo '</pre></td>';
echo'<td style="vertical-align:top"><pre><h1>3: ($tpnb + 1 -
1)</h1>';
// try accessing "object" by increasing and decreasing the index
print_r($tplxml->object[($tpnb + 1 - 1)]);
echo '</pre></td>';
echo'<td style="vertical-align:top"><pre><h1>4: temp
var</h1>';
// use a temporary variable to re-set the index in the same
variable
$tpnbx = $tpnb;
unset($tpnb);
$tpnb = $tpnbx;
print_r($tplxml->object[$tpnb]);
echo '</pre></td>';
echo '</tr></table>';
}
Expected result:
----------------
All the columns should return:
SimpleXMLElement Object
(
[@attributes] => Array
(
[type] => obj_6
[label] => Label for object 6
)
)
Actual result:
--------------
Column one is empty.
--
Edit bug report at https://bugs.php.net/bug.php?id=72588&edit=1
--
Try a snapshot (PHP 5.4): https://bugs.php.net/fix.php?id=72588&r=trysnapshot54
Try a snapshot (PHP 5.5): https://bugs.php.net/fix.php?id=72588&r=trysnapshot55
Try a snapshot (trunk): https://bugs.php.net/fix.php?id=72588&r=trysnapshottrunk
Fixed in SVN: https://bugs.php.net/fix.php?id=72588&r=fixed
Fixed in release: https://bugs.php.net/fix.php?id=72588&r=alreadyfixed
Need backtrace: https://bugs.php.net/fix.php?id=72588&r=needtrace
Need Reproduce Script: https://bugs.php.net/fix.php?id=72588&r=needscript
Try newer version: https://bugs.php.net/fix.php?id=72588&r=oldversion
Not developer issue: https://bugs.php.net/fix.php?id=72588&r=support
Expected behavior: https://bugs.php.net/fix.php?id=72588&r=notwrong
Not enough info: https://bugs.php.net/fix.php?id=72588&r=notenoughinfo
Submitted twice: https://bugs.php.net/fix.php?id=72588&r=submittedtwice
register_globals: https://bugs.php.net/fix.php?id=72588&r=globals
PHP 4 support discontinued: https://bugs.php.net/fix.php?id=72588&r=php4
Daylight Savings: https://bugs.php.net/fix.php?id=72588&r=dst
IIS Stability: https://bugs.php.net/fix.php?id=72588&r=isapi
Install GNU Sed: https://bugs.php.net/fix.php?id=72588&r=gnused
Floating point limitations: https://bugs.php.net/fix.php?id=72588&r=float
No Zend Extensions: https://bugs.php.net/fix.php?id=72588&r=nozend
MySQL Configuration Error: https://bugs.php.net/fix.php?id=72588&r=mysqlcfg