Hi Daniele On Fri, Dec 23, 2022 at 1:09 AM joke2k <jok...@gmail.com> wrote: > > Hi folks, > > What do you think about having a method which returns the class instance > `$this` by default only IF its return type is set as `self`? > > It is very common for fluent class methods to have a verbose `return > $this;` ending in their body.
Instead of adding special syntax to make writing fluent accessors easier, I wonder if something akin to Dart's cascade operator would be a better approach. https://dart.dev/guides/language/language-tour#cascade-notation $foo ..setBar('bar') ..setBaz('baz'); The syntax is just copied from Dart, there's probably a better fit for PHP. .. would invoke a method call but discard the return value, evaluating to the lhs of the method call instead. With an operator solution one can use fluent method calls on APIs that aren't specifically designed for it when desired, accessors can become leaner as return $this is no longer necessary, and it becomes obvious at call-site that the chained methods are called on the same object. I'm not sure about syntax or the fact that Dart allows property assignments in combination with .. as that makes the syntax ambiguous (or whitespace sensitive), but that wouldn't be necessary for what you're proposing. Example of the ambiguity: $foo ..bar = $bar ..baz() // Could be parsed as $foo..(bar = $bar)..baz() $foo..bar = ($bar..baz()) An alternative might be a C# style syntax which would make property assignments unambiguous. $foo { setBar('bar'), baz = 'baz', } But this is also longer and less readable (to me at least). Anyway, just my unrefined thoughts. I would not support implicit `return $this` for self or static. At the very least, the return type should be $this (which is essentially a sub-type of static) but that too doesn't seem like an elegant solution to me. Ilija -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php