php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #25816 Class constants of type array hold directly inaccessible keys/values
Submitted: 2003-10-10 00:24 UTC Modified: 2004-01-09 08:58 UTC
From: dan at wep dot net Assigned:
Status: Closed Package: Scripting Engine problem
PHP Version: 5CVS-2003-11-29 OS: *
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: dan at wep dot net
New email:
PHP Version: OS:

 

 [2003-10-10 00:24 UTC] 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 '[' 

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2003-10-10 00:29 UTC] 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 12:24 UTC] helly@php.net
This is an easier verification:
php -r 'class t{const c=array(1=>"Hello\n");} echo t::c[1];'
 [2003-12-01 20:37 UTC] 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];
 [2004-01-09 08:58 UTC] stas@php.net
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.
 [2004-03-09 07:26 UTC] seva-php at zend dot com
Const arrays is very useful thing! For example when storing error codes etc.

Why isn't it possible just to fix the behavior?
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Sat Feb 01 03:01:33 2025 UTC