From b1f060261792327e421b55882ad4810021dbfbcc Mon Sep 17 00:00:00 2001 From: Hakayashii Date: Wed, 23 Apr 2025 20:48:59 +0200 Subject: [PATCH] [VarExporter] Fix: Use correct closure call for property-specific logic in $notByRef --- .../VarExporter/Internal/Hydrator.php | 2 +- .../LazyProxy/HookedWithDefaultValue.php | 11 +++++++++ .../VarExporter/Tests/LazyGhostTraitTest.php | 23 +++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/Symfony/Component/VarExporter/Tests/Fixtures/LazyProxy/HookedWithDefaultValue.php diff --git a/src/Symfony/Component/VarExporter/Internal/Hydrator.php b/src/Symfony/Component/VarExporter/Internal/Hydrator.php index d8250d44b4238..158f6ca64a5fe 100644 --- a/src/Symfony/Component/VarExporter/Internal/Hydrator.php +++ b/src/Symfony/Component/VarExporter/Internal/Hydrator.php @@ -166,7 +166,7 @@ public static function getSimpleHydrator($class) $object->$name = $value; $object->$name = &$value; } elseif (true !== $noRef) { - $notByRef($object, $value); + $noRef($object, $value); } else { $object->$name = $value; } diff --git a/src/Symfony/Component/VarExporter/Tests/Fixtures/LazyProxy/HookedWithDefaultValue.php b/src/Symfony/Component/VarExporter/Tests/Fixtures/LazyProxy/HookedWithDefaultValue.php new file mode 100644 index 0000000000000..1281109e7228d --- /dev/null +++ b/src/Symfony/Component/VarExporter/Tests/Fixtures/LazyProxy/HookedWithDefaultValue.php @@ -0,0 +1,11 @@ + $this->backedWithDefault; + set => $this->backedWithDefault = $value; + } +} diff --git a/src/Symfony/Component/VarExporter/Tests/LazyGhostTraitTest.php b/src/Symfony/Component/VarExporter/Tests/LazyGhostTraitTest.php index 5b80f6b00339b..3f7513c270b5f 100644 --- a/src/Symfony/Component/VarExporter/Tests/LazyGhostTraitTest.php +++ b/src/Symfony/Component/VarExporter/Tests/LazyGhostTraitTest.php @@ -27,6 +27,7 @@ use Symfony\Component\VarExporter\Tests\Fixtures\LazyGhost\TestClass; use Symfony\Component\VarExporter\Tests\Fixtures\LazyProxy\AsymmetricVisibility; use Symfony\Component\VarExporter\Tests\Fixtures\LazyProxy\Hooked; +use Symfony\Component\VarExporter\Tests\Fixtures\LazyProxy\HookedWithDefaultValue; use Symfony\Component\VarExporter\Tests\Fixtures\SimpleObject; class LazyGhostTraitTest extends TestCase @@ -505,6 +506,28 @@ public function testPropertyHooks() $this->assertSame(345, $object->backed); } + /** + * @requires PHP 8.4 + */ + public function testPropertyHooksWithDefaultValue() + { + $initialized = false; + $object = $this->createLazyGhost(HookedWithDefaultValue::class, function ($instance) use (&$initialized) { + $initialized = true; + }); + + $this->assertSame(321, $object->backedWithDefault); + $this->assertTrue($initialized); + + $initialized = false; + $object = $this->createLazyGhost(HookedWithDefaultValue::class, function ($instance) use (&$initialized) { + $initialized = true; + }); + $object->backedWithDefault = 654; + $this->assertTrue($initialized); + $this->assertSame(654, $object->backedWithDefault); + } + /** * @requires PHP 8.4 */