Thanks, now I realise I was probably wrong to bring this up.

I had it in my mind that "::" could never appear chained together (thinking
of constants), but it's just that I've never seen code that chains them
together – i.e. this is valid:

A::b()::c()::$d::$e = 5;


On Mon, 15 Feb 2021 at 15:06, Rowan Tommins <rowan.coll...@gmail.com> wrote:

> On 15/02/2021 14:52, Matthew Brown wrote:
> > The most comparable example is between namespace separators:
> >
> > Ns \ bar();
> > Ns \ SOME_CONST;
> >
> > are both syntax errors.
>
>
> As Sara says, this only became an error in 8.0, and there was a rather
> specific reason for it, but I think there is a philosophical difference,
> too.
>
> "\" is part of a single piece of syntax: a fully-qualified class,
> constant, or function name. You can't write $foo\Bar or Foo\$bar or
> $foo\$bar.
>
> "::" on the other hand is an operator that can be used in a variety of
> ways. You can write $foo::bar(), Foo::$bar, $foo::$bar, {$foo .
> 'Handler'}::handle(), parent::foo(), and so on. It stands to reason that
> it would have the same whitespace rules as any other operator.
>
>
> > I was surprised to learn that PHP treats :: similar to ->
>
> I think it would be rather surprising if it *didn't* treat the two
> operators similarly, since they're so closely related.
>
>
> > I wonder if there's a benefit to removing a small potential footgun from
> > the language?
>
>
> I'm not really sure what the footgun here is. Adding newlines around
> just about any operator you can think of will lead to code that confuses
> at first glance:
>
> $x = [
>      1,
>      2,
>      3,
>      4,
>      5
> ]
>
> // Wait, we're not done yet...
>
> [2];
>
>
> Short of changing the entire language from semicolon-delimited to
> newline-delimited, that's inevitable.
>
>
> Regards,
>
> --
> Rowan Tommins
> [IMSoP]
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: https://www.php.net/unsub.php
>
>

Reply via email to