Re: Bug #16687 Updated: Constants not being interpreted in "variable variables"

From: Date: Fri, 19 Apr 2002 18:07:30 +0000
Subject: Re: Bug #16687 Updated: Constants not being interpreted in "variable variables"
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-83034@lists.php.net to get a copy of this message
On 19 Apr 2002 lux@simian.ca wrote: > ID: 16687 > Updated by: lux@simian.ca > Reported By: lux@simian.ca > Status: Bogus > Bug Type: Scripting Engine problem > Operating System: Red Hat Linux 7.1 > PHP Version: 4.2.0 > New Comment: > > But then why does it work under certain circumstances and not others? > Regardless whether intended or not, this is inconsistent behaviour. Yes it is indeed. > I also think that having these differences between regular variables > and the "superglobals" shouldn't be necessary. If I can't use them in > the same contexts as regular variables, then I would personally prefer > the $HTTP_*_VARS instead, because you can. > > I have found my approach to abstracting this difference ($HTTP_*_VARS > vs. $_*) between PHP versions to be really beneficial to my scripts. I > can abstract them both down to one name, and use a single reference to > the appropriate one instead of sticking if statements every time I need > to know which one to use. Then just stick to $HTTP_*_VARS and you dont need no fancy references. This works with akk versions of PHP. But I strongly recommend to use the $_* variant for new projects. regards, Derick > Previous Comments: > ------------------------------------------------------------------------ > > [2002-04-19 10:33:59] derick@php.net > > You can't use superglobals indirectly, check this: > > $t = "_GET"; > var_dump ($$t); > > doesn't work neither, and it wasn't supposed to work. > > However, this does work (because $HTTP_GET_VARS is not a superglobal): > > $t = "HTTP_GET_VARS"; > var_dump ($$t); > > > Derick > > ------------------------------------------------------------------------ > > [2002-04-18 19:09:09] sniper@php.net > > reclassified > > ------------------------------------------------------------------------ > > [2002-04-18 17:30:28] lux@simian.ca > > It seems to be happening only under certain contexts. Here is a script > that works fine: > > <?php > > $test = 'asdf'; > > define ('_TEST', 'test'); > > echo 'constant: '; > print_r (${_TEST}); > > echo '<br />direct: '; > print_r ($test); > > ?> > > And here is code that does not: > > <?php > > if (PHP_VERSION < '4.1.0') { > define ('_GET', 'HTTP_GET_VARS'); > } else { > define ('_GET', '_GET'); > } > > class CGI { > var $param = array (); > > function CGI () { > global $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_POST_FILES; > > if (${_GET}) { > reset (${_GET}); > while (list ($k, $v) = each (${_GET})) { > if (get_magic_quotes_gpc () == 1) { > $this->{$k} = stripslashes ($v); > } else { > $this->{$k} = $v; > } > array_push ($this->param, $k); > } > } else { > echo '<br />_GET value: '; print_r (_GET); > echo '<br />$_GET value: '; print_r ($_GET); > echo '<br />${_GET} value: '; print_r (${_GET}); > } > } > } > > $cgi = new CGI; > > echo '<br />$cgi value: '; print_r ($cgi); > > ?> > > ------------------------------------------------------------------------ > > [2002-04-18 16:43:17] lux@simian.ca > > Constants do not appear to be interpreted properly in the following > context: > > ${CONSTANT} > > I found this problem with the following code: > > <?php > > if (PHP_VERSION < '4.1.0') { > define ('_GET', 'HTTP_GET_VARS'); > // etc. > } else { > define ('_GET', '_GET'); > // etc. > } > > print_r (${_GET}); > > ?> > > This should print out the $_GET hash in 4.2.0RC4, but it prints > nothing. A quick check of the _GET constant shows that it does contain > the proper value. > > I compile php with: > > './configure' '--with-pgsql=shared' '--with-gd' > '--with-mysql=/usr/local/mysql' > '--with-apxs2=/usr/local/apache2/bin/apxs' '--enable-shmop' > '--enable-xslt' '--with-xslt-sablot' > > Thanks! > > ------------------------------------------------------------------------ > > > -- > Edit this bug report at > http://bugs.php.net/?id=16687&edit=1 >

« previous php.dev (#83034) next »