On 12/07/2016 00:14, Jesse Schalken wrote:
If so, some consideration should be made as to which syntax is preferred
to solve this problem generally for both setting properties and calling
methods.

I prefer the "obj { .. }" syntax because it mirrors object literals in
JSON/JavaScript, object initializers in C# and C/C++ and Haskell record
syntax, is particularly concise when nested to create large trees of
objects, and avoids the noise of "->>" on each line.

All the examples you've given for that syntax are for initialisation, and I'm not sure how readable it would be for the general "do several things in a row" case:

$counter {
   count(),
   count(),
   count(),
   count()
}

Thinking about it, this becomes something more like a "with" keyword:

with ( $counter ) {
   count();
   count();
   count();
   count();
}

If with(){} could be used as an expression, you'd get something remarkably close to your initialiser example:

$this->setBlah(
    with ( Blah::create(4) ) {
            foo = $foo;
            baz = with ( new Baz() ) {
                markFixed();
                label = "Hello";
            };
            setBot(9);
    }
);

I'm not sure if this is a good thing or not - with() statements exist in a few languages, with varying degrees of acceptance. I don't remember seeing one used as an expression like that before, though.

There's a definite awkwardness of what to put on the left side of property assignments too...

with ( new Foo ) { var = 1 }
with ( new Foo ) { $var = 1 }
with ( new Foo ) { ->var = 1 }


Overall, it's an interesting idea, but the details are fiddly, and the gains marginal, IMO.

Regards,
--
Rowan Collins
[IMSoP]

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to