On Sat, Oct 31, 2020, at 5:06 AM, Rowan Tommins wrote:

> > This would be
> >an artificial limitation on attributes to patch over the inherent
> >inconsistency of the grouped syntax for nested attributes.
> 
> 
> There is no artificial limitation; there is a binary choice: does 
> #[Foo] represent an object or a list with one item in? This is 
> completely new syntax, so there is nothing for it to be inconsistent 
> with other than itself.
> 
> I am arguing that having it represent a list with one item in is 
> actually *more* consistent, because when you attach attributes to a 
> declaration, they are always retrieved as a list.

Perhaps a naive question, but I'm missing the downside of:

#[Foo(Bar(name="baz"))]

#[Attribute]
class Foo {
  public function construct(public Bar $bar) {}
}

class Bar {
  public function construct(public string $name) {}
}

Why is that not OK?  Someone mentioned it means you couldn't call a function 
there, but... that's not a huge problem because I can't imagine why you would.  
If we really wanted to avoid that:

#[Foo(new Bar(name="baz"))]

That would be unambiguous, if a bit ugly.

--Larry Garfield

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

Reply via email to