Andi,

Yes, you are correct in that respect, my patch would accomplish just that.
No where in PHP documentation does it say that you cannot have TEST and test 
defines in the same script. Unless you specifically tell the define() 
function to treat the define as case insensitive.
Because the defines are always lowercased unless the defines for i18n systems 
are always declared in lower case any define with a letter 'I' for example 
would break on a system using most non English locales. This is a VERY 
serious problems, for example consider the reversal of the htmlenteties() 
function. The following code: 
get_html_translation_table (HTML_ENTITIES);
will break if a ru_UI or tr_TR or any other number of non-English locales are 
exported.

In addition because all locales are lower cased defines suffer large 
performance degradation when compared to other variables because another copy 
of the define name needs to be allocated and then lower cased every single 
time a define is declared or retrieved.

As far as I know, php variables are always case sensitive and there is now way 
to make them not, why an exception was made for defines I do not know, 
especially when you consider that in C and C++ defines are ALWAYS case 
sensitive. IMHO this is a very bad feature, that not only implements useless 
functionality but actually causes PHP code to break.
Therefor, I humbly ask that you reconsider your position on this issue.


Ilia


On June 15, 2002 03:03 pm, you wrote:
> Ilia,
>
> Your patch basically makes PHP constants case sensitive.
> Changing this is a very big backwards compatibility problem.
> You're not supposed to register two define's with the same letters but
> different case.
>
> Andi
>
> At 01:21 PM 6/15/2002 -0400, Ilia A. wrote:
> >Hello,
> >
> >While developing software in PHP that supports i18n I've come across
> > several problems that affect defines made in PHP.
> >The first problem is that when a define is declared and its name contains
> >upper case characters such as I, the define becomes unusable if a locale,
> >which does not support those chracters is exported, such as tr_TR or
> > ru_IU. Bug Report at: http://bugs.php.net/bug.php?id=16865
> >
> >There is a problem with case sensetivity of defines, for example, if you
> >create a case sensetive define 'TEST' and then a case sensetive define
> >'test', the latter define's value will be lost.
> >Bug Report at: http://bugs.php.net/?id=17658
> >
> >The problem occurs because zend internally (zend_constants.c) seems to
> > always lowecase the define before it is fetched/added to the hash table
> > of defines. This causes problem for i18n because the define is lowercased
> > using c's tolower function, which is affected by locale settings. Because
> > it is stored as lower case, having 2 defines with the same name but in
> > different case also becomes impossible to do.
> >
> >Attached is a patch against zend_constants.c CVS revision 1.38 that fixes
> >both
> >of these bugs, I hope the developers would consider adding this patch to
> > the CVS.
> >
> >Ilia
> >--
> >PHP Development Mailing List <http://www.php.net/>
> >To unsubscribe, visit: http://www.php.net/unsub.php


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to