On Mon, Oct 23, 2023 at 6:22 PM Pierre <pierre-...@processus.org> wrote: > > Le 23/10/2023 à 18:11, Saki Takamachi a écrit : > >> If I understand your use case properly, you should be confused by > >> properties with default values that are not constructor-promoted as well ? > >> Am I wrong ? In this case, your problem is not with promoted properties ? > > If we specify it the way you say, the initial values of the constructor > > arguments will be available even when the constructor is not called. > > > > Such behavior felt a little counterintuitive. > > Which then would simply be the same behavior as properties when not > promoted but declared in the class body instead: > > ```php > > class Foo > { > public $val = 'abc'; > } > > $redis_foo = serialize(new Foo()); > > $foo = unserialize($redis_foo); > var_dump($foo->val); > // string(3) "abc" > > ``` > > Right ? > > What's the most disturbing in my opinion is that: `class Foo { public > string $val = 'abc' }` and `class Foo { public function > __construct(public string $val = 'abc' ) {}}` don't yield the same > behavior at the time. > > Regards, > > -- > > Pierre > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: https://www.php.net/unsub.php >
Here's a nice and simple example: https://3v4l.org/DU0tG class A { public string $default = 'default'; } class B { public function __construct(public string $default = 'default') {} } $a = new A(); echo "Original A: {$a->default}\n"; $b = new B(); echo "Original B: {$b->default}\n"; $a = (new ReflectionClass($a))->newInstanceWithoutConstructor(); echo "New A: {$a->default}\n"; $b = (new ReflectionClass($b))->newInstanceWithoutConstructor(); echo "New B: {$b->default}\n"; // crashes here Robert Landers Software Engineer Utrecht NL -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php