|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2006-10-13 15:47 UTC] 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.
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Nov 30 21:00:01 2025 UTC |
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.