On Fri, Jun 7, 2024, at 9:34 PM, Erick de Azevedo Lima wrote:
> Hi all.
>
>> Em sex., 7 de jun. de 2024 às 17:53, Pierre <pierre-...@processus.org> 
>> escreveu:
>> I do agree with you that when you use value objects, you need it a lot, 
>> but I'd much prefer having a JS like value objects initializer syntax, 
>> such as `Point {x: 1, y: 2}` syntax than creating another way to call 
>> the constructor, which already has a mastered and comprehensive syntax 
>> which is simply `new`.
>
> I also think that `new `(4 chars, if we count the blank space) is short 
> enough.
> But a JS-like syntax that's already known for representing objects 
> could be used.
> I'm sympathetic to something like this (changing the OP examples):
>
> class A {
>      public function b() {
>           echo "I'm B";
>      }
>  }
>
>  A::{}->b();
>
>
> class Foo {
>     public function __construct(
>         public string $name
>     ) {}
> }
>
> class Bar {
>    public function __construct(
>         public Foo $foo
>    ) {}
> }
>
>  $bar = Bar::{ Foo::{ "I'm foo in bar" } };
>  echo $bar->foo->name;
>
>
> #[AttributeOverrides([
>     AttributeOverride::{
>         name: "id",
>         column: Column::{ name: "guest_id", type: "integer", length: 
> 140 }
>     },
>     AttributeOverride::{
>         name: "name",
>         column: Column::{ name: "guest_name", nullable: false, unique: 
> true, length: 240 }
>     }]
> )]
>
>
> #[AttributeOverrides([
>     AttributeOverride::{
>         name: "id",
>         column: Column::{ name: "guest_id", type: "integer", length: 
> 140 }
>     },
>     AttributeOverride::{
>         name: "name",
>         column: Column::{ name: "guest_name", nullable: false, unique: 
> true, length: 240 }
>     }]
> )]
>
> --
> Erick

We already have named arguments, which gives nearly the same syntax.  Writing 
directly to properties like that makes no sense in a language that has 
class-private properties and internal constructors.  It's fine in Rust or Go 
that don't have internal constructors, but it's just not a good fit in a 
PHP-like language.

And new Foo(a: 'A", b: 'B") is already perfectly readable and self-documenting. 
 Yet another constructor-invoke syntax on top of that would offer nothing.

--Larry Garfield

Reply via email to