Req #39150 [Opn->Nab]: PHP allows invalid names for constants and variables
| From: | nikic@php.net | Date: | Sat, 22 Sep 2012 08:39:38 +0000 |
| Subject: | Req #39150 [Opn->Nab]: PHP allows invalid names for constants and variables | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-173628@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=39150&edit=1
ID: 39150
Updated by: nikic@php.net
Reported by: z_rules55 at hotmail dot com
Summary: PHP allows invalid names for constants and variables
-Status: Open
+Status: Not a bug
Type: Feature/Change Request
-Package: Feature/Change Request
+Package: *General Issues
Operating System: WinXP
PHP Version: 5.1.6
Block user comment: N
Private report: N
New Comment:
PHP allows arbitrary variable names using the ${'string'} syntax. The restrictions only
apply to the $name syntax. The same applies to constants and various other names in PHP, which have
a "plain" access method and an access method based on a string.
Previous Comments:
------------------------------------------------------------------------
[2006-10-16 19:40:20] z_rules55 at hotmail dot com
Changing the status of this back to Open because I think it deserves further consideration.
------------------------------------------------------------------------
[2006-10-13 19:12:22] z_rules55 at hotmail dot com
I checked the docs, and I don't see anyone else having submitted the same bug to the bug
database.
If this is not a bug, maybe I should change it to feature request? Why would PHP allow the creation
of variables and constants that can only be accessed with a work-around instead of directly, as is
most natural and intuitive? You say "read the variable", not "access the superglobal
array with the associative index equal to the variable's name". Likewise, why would you
have to call a function to read a constant that you already know the name of?
Or, change the docs so they make this fact more clear: that you *can* in fact create variables and
constants with supposedly invalid names, but you'll have a harder time using them later on.
------------------------------------------------------------------------
[2006-10-13 15:52:01] tony2001@php.net
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
------------------------------------------------------------------------
[2006-10-13 15:47:02] z_rules55 at hotmail dot com
Description:
------------
The PHP manual states that:
A valid variable name starts with a letter or
underscore, followed by any number of letters,
numbers, or underscores.
And that constants must follow the same naming rules as variables. However, PHP allows me to define
variables and constants with an invalid character like a hyphen or a dollar sign, as well as
starting with a number. Those are the only three invalid names I tested; I assume others could also
be used.
Reproduce code:
---------------
<?php
define('my$definition', 'value');
define('my-definition', 'value');
define('2mydefinition', 'value');
$var = '2morrow$is-another-day';
$$var = 'this should be invalid';
echo constant('my$definition')."\n";
echo constant('my-definition')."\n";
echo constant('2mydefinition')."\n";
echo $GLOBALS['2morrow$is-another-day']."\n";
echo "\n";
//echo my$definition."\n";
echo my-definition."\n";
//echo 2mydefinition."\n";
//echo $2morrow$is-another-day."\n";
?>
Expected result:
----------------
Some kind of error upon defining the constant or variable with the invalid name.
Actual result:
--------------
PHP happily accepts the define() with the invalid name, as well as the assignment to the variable
variable with the invalid name. Using constant() and $GLOBALS to read the value of the invalid
constant and variable work fine. Echoing the value of my-definition gives the usual warning of:
Notice: Use of undefined constant my - assumed 'my' in
C:\path\to\script.php on line 14
Notice: Use of undefined constant definition -
assumed 'definition' in C:\path\to\script.php
on line 14
Only when you try to access the invalid constant or variable directly does PHP throw parse errors.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=39150&edit=1