From: sweiss at stylesight dot com Operating system: Debian PHP version: 5.3.0 PHP Bug Type: Class/Object related Bug description: Cannot define class constant with constant value
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 bug report at http://bugs.php.net/?id=49431&edit=1 -- Try a snapshot (PHP 5.2): http://bugs.php.net/fix.php?id=49431&r=trysnapshot52 Try a snapshot (PHP 5.3): http://bugs.php.net/fix.php?id=49431&r=trysnapshot53 Try a snapshot (PHP 6.0): http://bugs.php.net/fix.php?id=49431&r=trysnapshot60 Fixed in SVN: http://bugs.php.net/fix.php?id=49431&r=fixed Fixed in SVN and need be documented: http://bugs.php.net/fix.php?id=49431&r=needdocs Fixed in release: http://bugs.php.net/fix.php?id=49431&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=49431&r=needtrace Need Reproduce Script: http://bugs.php.net/fix.php?id=49431&r=needscript Try newer version: http://bugs.php.net/fix.php?id=49431&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=49431&r=support Expected behavior: http://bugs.php.net/fix.php?id=49431&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=49431&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=49431&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=49431&r=globals PHP 4 support discontinued: http://bugs.php.net/fix.php?id=49431&r=php4 Daylight Savings: http://bugs.php.net/fix.php?id=49431&r=dst IIS Stability: http://bugs.php.net/fix.php?id=49431&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=49431&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=49431&r=float No Zend Extensions: http://bugs.php.net/fix.php?id=49431&r=nozend MySQL Configuration Error: http://bugs.php.net/fix.php?id=49431&r=mysqlcfg