Re: [PHP-DEV] [Concept] declare(strict_identifiers=1)
Christian Schneider <[email protected]>
| Newsgroups | gmane.comp.php.devel |
|---|---|
| Message-ID | <[email protected]> |
Am 26.08.2026 um 21:57 schrieb Luca Rodenhäuser <[email protected]>: > What it does solve, ordered by how much I think each is actually worth: > > 1. PHP has no definition of an identifier. The only answer to "what is a > valid PHP identifier" is "whatever bytes the scanner accepted", which > is why the manual, PHP-Parser, every IDE and every static analyser > each copy out the same byte class. That is a language-definition gap, > not a bug report. I'm not sure why you consider a formal definition like LABEL [a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]* not a definition. Personally I find this a simpler definition (and easier to implement in a parser) than something like UTF-8, UAX31-R1-2 with the standard Default-Ignorable Exclusion Profile But then again I'm not really using non-ASCII identifiers today. > 2. Identifiers that render identically are different identifiers. A > no-break space or a decomposed umlaut inside a name is invisible in > every editor. Real, but rare: 11 instances in 168,604 files. I understand your point. But I'm not so worried about accidental mixups here. And this is also something an LSP or Linter can help you with if it a real concern for you. > 3. Case-insensitive lookup folds ASCII only. Stra<U+00DF>e and > STRA<U+00DF>E are the same class; Stra<U+1E9E>e is not, and Strasse is > not. That rule is coherent only if identifiers are ASCII. Case-insensitive folding adds another problem: Would you be using IntlChar::FOLD_CASE_DEFAULT or IntlChar::FOLD_CASE_EXCLUDE_SPECIAL_I to fold "I"? Or would you base it on a language setting? In general I think most people consider the case-folding for identifiers nowadays to be a bug, not a feature, so I would probably rather try to reduce than extend it. Regards, - Chris