diff --git a/rules-tests/Php84/Rector/Foreach_/ForeachToArrayAnyRector/Fixture/skip_value_extraction.php.inc b/rules-tests/Php84/Rector/Foreach_/ForeachToArrayAnyRector/Fixture/skip_value_extraction.php.inc new file mode 100644 index 00000000000..705230ef01f --- /dev/null +++ b/rules-tests/Php84/Rector/Foreach_/ForeachToArrayAnyRector/Fixture/skip_value_extraction.php.inc @@ -0,0 +1,21 @@ + 'foo'], + ]; + + foreach ($data as ['type' => $currentType]) { + if ($currentType === $type) { + return true; + } + } + + return false; + } +} diff --git a/rules/Php84/Rector/Foreach_/ForeachToArrayAllRector.php b/rules/Php84/Rector/Foreach_/ForeachToArrayAllRector.php index 46481ad2338..96629535526 100644 --- a/rules/Php84/Rector/Foreach_/ForeachToArrayAllRector.php +++ b/rules/Php84/Rector/Foreach_/ForeachToArrayAllRector.php @@ -198,6 +198,10 @@ private function isValidForeachStructure(Foreach_ $foreach, Variable $assignedVa return false; } + if (! $foreach->valueVar instanceof Variable) { + return false; + } + $type = $this->nodeTypeResolver->getNativeType($foreach->expr); return $type->isArray() ->yes(); diff --git a/rules/Php84/Rector/Foreach_/ForeachToArrayAnyRector.php b/rules/Php84/Rector/Foreach_/ForeachToArrayAnyRector.php index e3c349273a4..9ddea5d90c2 100644 --- a/rules/Php84/Rector/Foreach_/ForeachToArrayAnyRector.php +++ b/rules/Php84/Rector/Foreach_/ForeachToArrayAnyRector.php @@ -312,6 +312,10 @@ private function isValidEarlyReturnForeachStructure(Foreach_ $foreach): bool return false; } + if (! $foreach->valueVar instanceof Variable) { + return false; + } + $type = $this->nodeTypeResolver->getNativeType($foreach->expr); return $type->isArray() diff --git a/rules/Php84/Rector/Foreach_/ForeachToArrayFindKeyRector.php b/rules/Php84/Rector/Foreach_/ForeachToArrayFindKeyRector.php index 7f26f4914a3..61f74fd1856 100644 --- a/rules/Php84/Rector/Foreach_/ForeachToArrayFindKeyRector.php +++ b/rules/Php84/Rector/Foreach_/ForeachToArrayFindKeyRector.php @@ -203,6 +203,10 @@ private function isValidForeachStructure(Foreach_ $foreach, Variable $assignedVa return false; } + if (! $foreach->valueVar instanceof Variable) { + return false; + } + $type = $this->nodeTypeResolver->getNativeType($foreach->expr); return $type->isArray() ->yes(); diff --git a/rules/Php84/Rector/Foreach_/ForeachToArrayFindRector.php b/rules/Php84/Rector/Foreach_/ForeachToArrayFindRector.php index 378f39a94da..8ce48ae1252 100644 --- a/rules/Php84/Rector/Foreach_/ForeachToArrayFindRector.php +++ b/rules/Php84/Rector/Foreach_/ForeachToArrayFindRector.php @@ -195,6 +195,10 @@ private function isValidForeachStructure(Foreach_ $foreach, Variable $assignedVa return false; } + if (! $foreach->valueVar instanceof Variable) { + return false; + } + $type = $this->nodeTypeResolver->getNativeType($foreach->expr); return $type->isArray() ->yes();