Re: [Concept] declare(strict_identifiers=1)
| From: | Christian Schneider | Date: | Wed, 26 Aug 2026 23:25:19 +0000 |
| Subject: | Re: [Concept] declare(strict_identifiers=1) | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-132355@lists.php.net to get a copy of this message | ||
Am 26.08.2026 um 21:57 schrieb Luca Rodenhäuser <otzelot2021@outlook.de>:
> 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