Edit report at http://bugs.php.net/bug.php?id=52576&edit=1

 ID:                 52576
 Updated by:         [email protected]
 Reported by:        [email protected]
 Summary:            Variable variables can create invalid variables.
-Status:             Open
+Status:             Bogus
 Type:               Bug
 Package:            Scripting Engine problem
 Operating System:   Windows XP SP3
 PHP Version:        5.3.3
 Block user comment: N

 New Comment:

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

Variable names may contain any character.



${',.-+#*#+\\'} = 42;



This is expected.


Previous Comments:
------------------------------------------------------------------------
[2010-08-10 18:21:13] [email protected]

Description:
------------
It seems you can create a variable in $GLOBALS that is not accessible as
a 

normal variable.



I found this because I wanted to use variable variables to populate a
nested 

array.



Jim Lucas, in http://news.php.net/php.general/307392, comments that the
use of 

eval() may be appropriate in the case.



That aside, the entry that is created in $GLOBALS doesn't follow the
rules for 

variable naming in
http://docs.php.net/manual/en/language.variables.basics.php, 

namely that '[' and ']' are not valid variable names. I think this
should have t 

least produced an E_WARNING.



So, with all of that, I'm not sure if this is a bug or a documentation
problem.



I certainly think it is an edge case.



Regards,



Richard Quadling.

Test script:
---------------
<?php

// Show all errors.

error_reporting(-1);

ini_set('display_errors', 1);



// Expectation was to be able to create a deep array using variable
variables.

$a = 'b[1][2][3]';

$$a = 'Inaccessible?';

print_r($b);



// Hide superglobals

unset($_POST);

unset($_GET);

unset($_SESSION);

unset($_FILES);

unset($_COOKIE);

unset($_SERVER);

unset($argv);

unset($argc);



// Reveals inaccessible variable.

var_dump($GLOBALS);



Expected result:
----------------
Array

(

    [1] => Array

        (

            [2] => Array

                (

                    [3] => Inaccessible?

                )



        )



)

array(3) {

  ["GLOBALS"]=>

  *RECURSION*

  ["a"]=>

  string(10) "b[1][2][3]"

  ["b"]=>

  array(1) {

    [1]=>

    array(1) {

      [2]=>

      array(1) {

        [3]=>

        string(13) "Inaccessible?"

      }

    }

  }

}

Actual result:
--------------
Notice: Undefined variable: b in - on line 5

array(4) {

  ["GLOBALS"]=>

  *RECURSION*

  ["a"]=>

  string(10) "b[1][2][3]"

  ["b[1][2][3]"]=>

  string(13) "Inaccessible?"

  ["php_errormsg"]=>

  string(21) "Undefined variable: b"

}




------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=52576&edit=1

Reply via email to