From 16f0fb015fb7fff5ecff814e66536cd24536fe09 Mon Sep 17 00:00:00 2001 From: Toon Verwerft Date: Fri, 14 Jun 2024 07:29:23 +0200 Subject: [PATCH] Only filter properties when predicate is set --- src/Reflect/properties_set.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Reflect/properties_set.php b/src/Reflect/properties_set.php index 6759233..4746e44 100644 --- a/src/Reflect/properties_set.php +++ b/src/Reflect/properties_set.php @@ -26,12 +26,16 @@ function properties_set(object $object, array $values, Closure|null $predicate = { $class = ReflectedClass::fromObject($object); - $allProperties = $class->properties(); - $filteredProperties = $predicate ? filter($allProperties, $predicate) : $allProperties; - $newValues = $class->isDynamic() ? diff_by_key($values, $allProperties) : []; + if ($predicate) { + $allProperties = $class->properties(); + $filteredProperties = filter($allProperties, $predicate); + $unknownValues = $class->isDynamic() ? diff_by_key($values, $allProperties) : []; + + $values = merge($unknownValues, intersect_by_key($values, $filteredProperties)); + } return reduce_with_keys( - merge($newValues, intersect_by_key($values, $filteredProperties)), + $values, /** * @param T $object * @return T