On Mon, Jul 11, 2016 at 1:55 PM, Michał Brzuchalski <
michal.brzuchal...@gmail.com> wrote:

> 11 lip 2016 18:31 "Rasmus Schultz" <ras...@mindplay.dk> napisał(a):
> >
> > > what's the actual added value of this sort of operator?
> >
> > The only direct value to the language is brevity - mere convenience.
> >
> > But I think the biggest indirectly added value, is that this will
> > discourage people from the chainable methods anti-pattern - so this
> > has value to the community; those who write chainable methods can
> > stop, and those who want chainable methods can get a wider choice of
> > libraries that were previously too verbose in use for their taste.
> >
> > > For this sort of chaining I'd propose, in addition to the cascade
> operator,
> > > the chain operator. This would work like the cascade operator except
> that
> > > the return of the function is implicitly the first parameter of the
> next
> > > argument in the chain
> >
> > I don't like this idea, at all - I think we should aim for something
> > consistent with other languages. Per the Dart spec:
> >
> > > A cascaded method invocation expression of the form e..suffix is
> equivalent to the expression (t){t.suffix; return t;}(e).
> >
> > In other words, the expression always evaluates as the object, which
> > is fine for most cases, e.g. for everything you're doing with
> > chainable methods today - which can't actually return any values,
> > since they return $this. Note that something like PSR-7's HTTP
> > immutable models are actually factory methods, e.g. use-cases not
> > applicable to the cascade operator.
> >
> > The other marginal use case perhaps is cases where a builder of some
> > sort ends with a call to a factory method - this can be done without
> > adding a second operator, by using parens in a similar fashion to Dart
> > and others, e.g.:
> >
> >     $object = ($builder
> >         ->>setFoo(1)
> >         ->>setBar(2)
> >         ->>setBaz(3)
> >     )->build();
> >
> > Or obviously:
> >
> >     $builder
> >         ->>setFoo(1)
> >         ->>setBar(2)
> >         ->>setBaz(3);
> >
> >     $object = $builder->build();
> >
> > Regarding syntax - I feel the natural choice, e.g. similar to "." vs
> > "..", would be a longer arrow --> but that's ambiguous. (decrement
> > operator, greater than operator)
> >
> > The proposed |> operator looks horrible and is very awkward to type,
> > at least on both American and Danish keyboard - I use both. (it reads
> > like "or greater than" in my mind, so much so that glancing over
> > Sara's proposal earlier, I didn't even understand what it was.)
> >
> > Would something like ->> be ambiguous as well? That's fairly close too
> > - a double-headed arrow, not unlike the double dots of other
> > languages...
> >
>
> IMHO double-headed arrow looks pretty nice and whole idea is great. Very
> big +1 for this feature
>
>
>
Agreed, but what about static methods?  Triple colon perhaps?

A::setFoo(1)
  :::setBar(2)
  :::setBaz(3);

And I do agree that the double period is cleaner, but the bus left the
station a very long time ago (PHP 3 at least) by making . the connotation
operator.  Or at least I think so. If the parser could deal with it double
period would be best because it could apply to both contexts.

$object->setFoo(1)
  ..setBar(2)
  ..setBaz(3);

A_Class::setFoo(1)
  ..setBar(2)
  ..setBaz(3);

But again, I don't know how feasible the above is since I know next to
nothing about internals.

Reply via email to