[PHP] Variable Variables adn Superglobals

2004-08-04 Thread ARico
   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? I know 
I could use php references, but linking style does confuse me a bit ( 
how do you change a reference to point to a new variable if it's 
allready referencing another one ? )

Thank you in advance
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


Re: [PHP] Variable Variables adn Superglobals

2004-08-04 Thread Justin Patrin
On Wed, 04 Aug 2004 23:15:03 +0200, ARico [EMAIL PROTECTED] wrote:
 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? I know
 I could use php references, but linking style does confuse me a bit (
 how do you change a reference to point to a new variable if it's
 allready referencing another one ? )
 
 Thank you in advance
 

Looks right to me. I guess PHP doesn't support it. You may want to
file a bug or look for more on superglobals in the manual or bug
reports.

-- 
DB_DataObject_FormBuilder - The database at your fingertips
http://pear.php.net/package/DB_DataObject_FormBuilder

paperCrane --Justin Patrin--

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] Variable Variables adn Superglobals

2004-08-04 Thread ARico
Justin Patrin wrote:
On Wed, 04 Aug 2004 23:15:03 +0200, ARico [EMAIL PROTECTED] wrote:
 

   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? I know
I could use php references, but linking style does confuse me a bit (
how do you change a reference to point to a new variable if it's
allready referencing another one ? )
Thank you in advance
   

Looks right to me. I guess PHP doesn't support it. You may want to
file a bug or look for more on superglobals in the manual or bug
reports.
 

   Thanks, I guess I'll use references. Perhaps posting to internals?


Re: [PHP] Variable Variables adn Superglobals

2004-08-04 Thread Curt Zirzow
* Thus wrote ARico:
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 
 ...
 // End //
 
I'm doing something wrong? Or this is the expected behavior? I know 
 I could use php references, but linking style does confuse me a bit ( 
 how do you change a reference to point to a new variable if it's 
 allready referencing another one ? )

This is expected behaviour and is noted in the manual as well:

 http://php.net/variables.predefined

manual
Variable variables:  Superglobals cannot be used as variable
variables  inside functions or class methods.
/manual



Curt
-- 
First, let me assure you that this is not one of those shady pyramid schemes
you've been hearing about.  No, sir.  Our model is the trapezoid!

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php