Edit report at https://bugs.php.net/bug.php?id=39150&edit=1

 ID:                 39150
 Updated by:         ni...@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] tony2...@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

Reply via email to