ID: 25816 Updated by: [EMAIL PROTECTED] Reported By: dan at wep dot net -Status: Verified +Status: Closed Bug Type: Zend Engine 2 problem Operating System: * PHP Version: 5CVS-2003-11-29 New Comment:
This bug has been fixed in CVS. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. Arrays in class constants aren't allowed anymore. Previous Comments: ------------------------------------------------------------------------ [2003-12-01 20:37:23] a at b dot c dot de This isn't restricted to associative arrays in which keys are explicitly specified: class f { const t = array(7,6,5); } echo f::t[1]; ------------------------------------------------------------------------ [2003-10-10 12:24:39] [EMAIL PROTECTED] This is an easier verification: php -r 'class t{const c=array(1=>"Hello\n");} echo t::c[1];' ------------------------------------------------------------------------ [2003-10-10 00:29:45] dan at wep dot net The parse error thrown complains about the print(someData['foo']) line. Sorry if this wasn't clear. Also expected output would probably be more like "bar ..var_dump output.. bar. ------------------------------------------------------------------------ [2003-10-10 00:24:51] dan at wep dot net Description: ------------ Constants defined inside classes can be defined as an array prepopulated with key, value pairs; however this data is not directly accessible. It is possible to create a local variable copy of the constant at runtime and use it to access the data. If class constants are not meant to be able to hold array data, then a parse error should of been thrown on the 'const' declaration. Reproduce code: --------------- class test { const someData = array('foo' => 'bar'); function __construct() { $dataCopy = someData; print($dataCopy['foo']); // This works print(var_dump(someData)); // This works (shows all array information) print(someData['foo']); // This throws a parse error } } $obj = new test(); Expected result: ---------------- bar bar bar .. Jackpot! :) Actual result: -------------- Parse error: parse error, unexpected '[' ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=25816&edit=1