ID: 16687 Updated by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] 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. 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. Sorry to keep buggin' ya, but I think this may be a fair enough argument for change. Previous Comments: ------------------------------------------------------------------------ [2002-04-19 10:33:59] [EMAIL PROTECTED] 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] [EMAIL PROTECTED] reclassified ------------------------------------------------------------------------ [2002-04-18 17:30:28] [EMAIL PROTECTED] 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] [EMAIL PROTECTED] 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