Variable Variables and Superglobals

From: Date: Wed, 04 Aug 2004 23:35:32 +0000
Subject: Variable Variables and Superglobals
Groups: php.internals 
Request: Send a blank email to internals+get-11923@lists.php.net to get a copy of this message
Using Variable Variables works fine inside functions for global defined variables if you declare them as global inside the function. Suprinsingly, it does not seem to work with superglobals. Take the following example: // code //////////////////////////////////////////////////////////// <?php $glob_var="Var 1"; $var_glob_var="glob_var"; $var_ENV="_ENV"; echo $_ENV["OS"],"\n"; echo $glob_var,"\n\n"; echo $var_glob_var,"\n"; echo $var_ENV,"\n\n"; echo $$var_glob_var,"\n"; echo ${$var_ENV}["OS"],"\n\n"; foo1($var_glob_var); foo2($var_glob_var); foo3(); foo4(); foo5($var_ENV); foo6($var_ENV); foo7(); foo8(); foo9(); function foo1($arg){ echo "--- In foo1 --------------\n"; echo $arg,"\n"; echo $$arg,"\n"; echo "--------------------------\n"; } function foo2($arg){ global $glob_var; echo "--- In foo2 --------------\n"; echo $arg,"\n"; echo $$arg,"\n"; echo "--------------------------\n"; } function foo3(){ $arg="glob_var"; echo "--- In foo3 --------------\n"; echo $arg,"\n"; echo $$arg,"\n"; echo "--------------------------\n"; } function foo4(){ global $glob_var; $arg="glob_var"; echo "--- In foo4 --------------\n"; echo $arg,"\n"; echo $$arg,"\n"; echo "--------------------------\n"; } function foo5($arg){ echo "--- In foo5 --------------\n"; echo $arg,"\n"; echo ${$arg}["OS"],"\n"; echo "--------------------------\n"; } function foo6($arg){ global $_ENV; echo "--- In foo6 --------------\n"; echo $arg,"\n"; echo ${$arg}["OS"],"\n"; echo "--------------------------\n"; } function foo7(){ $arg="_ENV"; echo "--- In foo7 --------------\n"; echo $arg,"\n"; echo ${$arg}["OS"],"\n"; echo "--------------------------\n"; } function foo8(){ global $_ENV; $arg="_ENV"; echo "--- In foo8 --------------\n"; echo $arg,"\n"; echo ${$arg}["OS"],"\n"; echo "--------------------------\n"; } function foo9(){ echo "--- In foo9 --------------\n"; echo $_ENV["OS"],"\n"; echo "--------------------------\n"; } ?> // Output ///////////////////////////////////////////////////////// Windows_NT Var 1 glob_var _ENV Var 1 Windows_NT --- In foo1 -------------- glob_var -------------------------- --- In foo2 -------------- glob_var Var 1 -------------------------- --- In foo3 -------------- glob_var -------------------------- --- In foo4 -------------- glob_var Var 1 -------------------------- --- In foo5 -------------- _ENV -------------------------- --- In foo6 -------------- _ENV -------------------------- --- In foo7 -------------- _ENV -------------------------- --- In foo8 -------------- _ENV -------------------------- --- In foo9 -------------- Windows_NT -------------------------- // Version ////////////////////////////////////////////// PHP 4.3.7 (cgi-fcgi) (built: Jun 2 2004 15:49:31) Copyright (c) 1997-2004 The PHP Group Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies // End ////////////////////////////////////////////////// I'm doing something wrong? Or this is the expected behavior? Thank you in advance

« previous php.internals (#11923) next »