Re: Zend Constants PATCH
| From: | Andi Gutmans | Date: | Sat, 15 Jun 2002 19:44:24 +0000 |
| Subject: | Re: Zend Constants PATCH | ||
| References: | 1 2 3 4 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-85248@lists.php.net to get a copy of this message | ||
We're not going to add configuration options which change the language's behavior!
We've said this a million times.
Andi
At 09:41 PM 6/15/2002 +0200, Magnus M wrote:
What about a configuration option in php.ini use_case_sensitive = 0|1 and let it be 0 as default ? On Sat, 15 Jun 2002 22:25:18 +0300 Andi Gutmans <andi@zend.com> wrote: Ilia, I remember now the problem you're talking about. It has been discussed here in the past and I don't recall us having found a good solution. Basically we need a solution which is backwards compatible but will allow "TEST" and "test" to co-exist if case sensitivity was chosen for them. It's something to think about and not create a quick 2 line patch for the problem. I think one of the suggestions was using two hash tables. First doing a case-sensitive lookup and only if the constant isn't found doing a case-insensitive lookup. Andi At 03:40 PM 6/15/2002 -0400, Ilia A. wrote: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 TESTand testdefines 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 i18nsystemsare 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-Englishlocales areexported. In addition because all locales are lower cased defines suffer large performance degradation when compared to other variables becauseanother copyof 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 isnowway 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 implementsuselessfunctionality 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:containsIlia, 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 namelocale,upper case characters such as I, the define becomes unusable if aif youwhich 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,tablecreate 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 hashlowercasedof defines. This causes problem for i18n because the define isBecauseusing c's tolower function, which is affected by locale settings.but init is stored as lower case, having 2 defines with the same namethat fixesdifferent case also becomes impossible to do. Attached is a patch against zend_constants.c CVS revision 1.38patch toboth of these bugs, I hope the developers would consider adding this-- 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.phpthe CVS. Ilia -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php