diff --git a/rules-tests/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector/Fixture/skip_not_match_property_hook_type.php.inc b/rules-tests/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector/Fixture/skip_not_match_property_hook_type.php.inc new file mode 100644 index 00000000000..5d31dfdf104 --- /dev/null +++ b/rules-tests/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector/Fixture/skip_not_match_property_hook_type.php.inc @@ -0,0 +1,17 @@ +origin = is_array($origin) ? (object) $origin : clone $origin; + } + } + + public function __construct( + array|\stdClass $origin + ) { + $this->origin = $origin; + } +} diff --git a/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php b/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php index ecfd80ce807..89cf185b7dd 100644 --- a/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php +++ b/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php @@ -206,6 +206,13 @@ public function refactor(Node $node): ?Node continue; } + if ($property->type instanceof Node + && $param->type instanceof Node + && $property->hooks !== [] + && ! $this->nodeComparator->areNodesEqual($property->type, $param->type)) { + continue; + } + $hasChanged = true; // remove property from class