Bug #72588 [NEW]: Using global var doesn't work while accessing SimpleXML element

From: Date: Tue, 12 Jul 2016 18:19:01 +0000
Subject: Bug #72588 [NEW]: Using global var doesn't work while accessing SimpleXML element
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-202250@lists.php.net to get a copy of this message
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



Thread (3 messages)

« previous php.bugs (#202250) next »