ID: 46304 User updated by: kenashkov at gmail dot com -Summary: define() namespaced constant is case sensitive Reported By: kenashkov at gmail dot com Status: Open Bug Type: Scripting Engine problem Operating System: GNU/Linux debian lenny PHP Version: 5.3CVS-2008-10-15 (snap) New Comment:
changed summary Previous Comments: ------------------------------------------------------------------------ [2008-10-15 15:33:34] kenashkov at gmail dot com I had a quick look again over the docs and nowhere is documented that the namespaces are case insensitive. I think this should go in the docs, as well if this issue with define() wont be fixed, to be documented too. ------------------------------------------------------------------------ [2008-10-15 15:29:42] kenashkov at gmail dot com Description: ------------ The current implementatino of namespaces is case INSENSITIVE. But defining a constant using define and having capitals in the namespace makes the defined constant unreachable. We can verify this using get_defined_constants(). In case a constant was defined like: <? namespace NS1::ns2; const const1; ?> we can see the the defined constant/namespace is in fact: ns1::ns2::const1; But if the constant was defined using define(), it is kept with the capitalization: <? define('NS1::ns2::const1','value'); ?> get_defined_constants() gives NS1::ns2::const1. But because the namespaces are case insensitive the call: <? print NS1::ns2::const1; ?> resolves in fact to ns1::ns2::const1 which is undefined. Reproduce code: --------------- <? define('NS1::ns2::const1','value'); print NS1::ns2::const1;//error //print ns1::ns2::const1;//would give error too ?> Expected result: ---------------- value Actual result: -------------- Fatal error: Class 'NS1::ns2' not found in /home/local/tests/t35.php on line 3 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=46304&edit=1