Re: Multiple property assigning without constructor

From: Date: Wed, 04 Dec 2024 17:15:36 +0000
Subject: Re: Multiple property assigning without constructor
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-126100@lists.php.net to get a copy of this message
> > $person = new Person("Name", 43) { > firstName: "John", > age: 42 > }; Hi! You could achieve similar functionality with a simple user-land method "assign". If you put such a method on a trait, you can use it everywhere. See the example: <?php trait AssignsPropertiesValues { public function assign(...$props): static { foreach ($props as $propName => $propVal) { $this->$propName = $propVal; } return $this; } } class Person { use AssignsPropertiesValues; public function __construct( public string $firstName, public int $age ) { } } class Person2 { use AssignsPropertiesValues; public string $firstName; public int $age; } class Person3 { use AssignsPropertiesValues; public string $firstName { set => \strtoupper($value); } public int $age; } $p1 = new Person('Pig',5)->assign(firstName: 'Peppa', age: 6); $p2 = new Person2()->assign(firstName: 'George', age: 3); $p3 = new Person3()->assign(firstName: 'Danny', age: 7); var_dump($p1, $p2, $p3); https://3v4l.org/F83NO#v8.4.1 Best regards, Erick

« previous php.internals (#126100) next »