Req #49431 [Opn->Bgs]: Cannot define class constant with constant value
| From: | jani@php.net | Date: | Wed, 29 Dec 2010 11:23:36 +0000 |
| Subject: | Req #49431 [Opn->Bgs]: Cannot define class constant with constant value | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-157380@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=49431&edit=1
ID: 49431
Updated by: jani@php.net
Reported by: sweiss at stylesight dot com
Summary: Cannot define class constant with constant value
-Status: Open
+Status: Bogus
Type: Feature/Change Request
-Package: Feature/Change Request
+Package: *General Issues
Operating System: Debian
PHP Version: 5.3.0
Block user comment: N
Private report: N
New Comment:
Same as bug #30177
Previous Comments:
------------------------------------------------------------------------
[2009-09-01 16:27:30] sweiss at stylesight dot com
Description:
------------
In the PHP documentation it states:
"It is possible to define constant values on a per-class basis
remaining the same and unchangeable. Constants differ from normal
variables in that you don't use the $ symbol to declare or use them.
"The value must be a constant expression, not (for example) a
variable, a class member, result of a mathematical operation or a
function call."
This is however not entirely the case.
If you define a constant within a class based on another constant, it
will not work, despite the fact that it is a constant value.
In the given example, X_CONST . "Y" is a constant composed of two
other constants - no variables, class members, math expressions, or
function calls.
And, in fact, for normal, non-class constants, this is totally
possible:
define("Y_CONST", X_CONST . "Y");
is totally valid.
At the very least the documentation should be updated to reflect
simply that a class constant may only be defined as a simple scalar
value, and not just any constant expression.
Reproduce code:
---------------
define("X_CONST", "Const");
class TestClass {
const Y_CONST = X_CONST . "Y";
function test() {
return self::Y_CONST;
}
}
$a = new TestClass();
var_dump($a->test());
Expected result:
----------------
(string) "ConstY"
Actual result:
--------------
Parse error: syntax error, unexpected '.', expecting ',' or ';' in
line
5
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=49431&edit=1