> On Aug 23, 2024, at 7:50 AM, Rowan Tommins [IMSoP] <[email protected]> wrote:
>
> On Fri, 23 Aug 2024, at 12:29, Mike Schinkel wrote:
>> namespace \AcmeComponents\SplineReticulator\Utilities\Text
>>
>> function Foo():int {
>> return Text\strlen("Hello World");
>> }
>>
>> The above of course could result in BC breaks IF there happened to be
>> existing code that referenced Text\strlen() where Text was a top-level
>> namespace
>
> It wouldn't be a top-level namespace that would cause a conflict, but a nested one:
> currently the above code resolves the function name as
> "AcmeComponents\SplineReticulator\Utilities\Text\Text\strlen" (note the
> "...\Text\Text\...").
How often does that really occur in the wild?
And how can it occur without an explicit use
AcmeComponents\SplineReticulator\Utilities\Text\Text
statement, which I proposed would
override the automatic use
, anyway?
> It's an interesting suggestion, but I'm not totally sold on "use the end of the
> current namespace" being easier to remember than "use this symbol or keyword".
>
> return namespace\strlen("Hello World"); # current syntax, rather long and unclear
> return _\strlen("Hello World"); # short, but maybe a bit cryptic
> return Text\strlen("Hello World"); # variable length, relies on current context
> return NS\strlen("Hello World"); # shortening of current keyword
> return self\strlen("Hello World"); # maybe confusing to reuse a keyword?
> return current\strlen("Hello World"); # clear, but a bit long
The only one of those that has a strong analog to existing PHP code is to "use the end of the
current namespace" as people frequently do with explicit use
statements.
Yes, self
has a weak analog to self::
, but none of the others even come
close, IMO. And adding self\
may have unintended to the language, some slight BC
concerns, and/or downstream consequences for other projects vs. a simple automatic
use
.
Lastly, no comment on \\
?
-Mike