diff --git a/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/array_key_last.php.inc b/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/array_key_last.php.inc index 998780ec..c9daf691 100644 --- a/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/array_key_last.php.inc +++ b/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/array_key_last.php.inc @@ -22,6 +22,7 @@ class SomeClass { end($items); $lastItemKey = key($items); + reset($items); } } diff --git a/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/cast_array_key_last_value.php.inc b/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/cast_array_key_last_value.php.inc index 427dc4f1..b9990edb 100644 --- a/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/cast_array_key_last_value.php.inc +++ b/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/cast_array_key_last_value.php.inc @@ -27,6 +27,7 @@ class CastArrayKeyLastValue $stmts = (array) $classMethod->stmts; end($stmts); $lastItemKey = key($stmts); + reset($stmts); } } diff --git a/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/double_cast.php.inc b/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/double_cast.php.inc index ab6492fd..747779e3 100644 --- a/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/double_cast.php.inc +++ b/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/double_cast.php.inc @@ -27,6 +27,7 @@ class DoubleCast $stmts = (array)(array) $classMethod->stmts; end($stmts); $lastItemKey = key($stmts); + reset($stmts); } } diff --git a/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/inside_if_cond.php.inc b/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/inside_if_cond.php.inc index 3d6ef80c..a2fc3ba8 100644 --- a/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/inside_if_cond.php.inc +++ b/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/inside_if_cond.php.inc @@ -26,6 +26,7 @@ final class InsideIfCond { end($items); if (key($items)) { + reset($items); return true; } else { return false; diff --git a/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/keep_inside_else.php.inc b/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/keep_inside_else.php.inc index a7e76495..c7103545 100644 --- a/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/keep_inside_else.php.inc +++ b/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/keep_inside_else.php.inc @@ -29,6 +29,7 @@ final class KeepInsideIf } else { end($argumentValue); $this->completionValue = $argumentValue ? $argumentValue[key($argumentValue)] : null; + reset($argumentValue); } } } diff --git a/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/keep_inside_if.php.inc b/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/keep_inside_if.php.inc index 270501d8..34773fb1 100644 --- a/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/keep_inside_if.php.inc +++ b/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/keep_inside_if.php.inc @@ -27,6 +27,7 @@ final class KeepInsideIf if (\is_array($argumentValue)) { end($argumentValue); $this->completionValue = $argumentValue ? $argumentValue[key($argumentValue)] : null; + reset($argumentValue); } } } diff --git a/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/method_call_as_arg.php.inc b/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/method_call_as_arg.php.inc index c324acb7..bbfce08e 100644 --- a/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/method_call_as_arg.php.inc +++ b/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/method_call_as_arg.php.inc @@ -27,6 +27,7 @@ class MethodCallAsArg $getArgs = $node->getArgs(); end($getArgs); $lastItemKey = key($getArgs); + reset($getArgs); } } diff --git a/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/possible_non_array_or_object_array_key_last.php.inc b/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/possible_non_array_or_object_array_key_last.php.inc index 05f69ac1..74179653 100644 --- a/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/possible_non_array_or_object_array_key_last.php.inc +++ b/rules-tests/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector/Fixture/possible_non_array_or_object_array_key_last.php.inc @@ -36,6 +36,7 @@ class PossibleNonArrayOrObjectArrayKeyLast } if (!\is_array($v) || 1 !== \count($v) || 10 !== \strlen($k = (string) key($v)) || "\x9D" !== $k[0] || "\0" !== $k[5] || "\x5F" !== $k[9]) { + reset($v); return false; } diff --git a/rules/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector.php b/rules/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector.php index 79f37245..6fd2b54d 100644 --- a/rules/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector.php +++ b/rules/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector.php @@ -214,6 +214,16 @@ private function refactorArrayKeyLast( $newStmts[] = $stmt; + $resetExpression = new Expression($this->nodeFactory->createFuncCall('reset', [$array])); + + if (! $stmt instanceof StmtsAwareInterface && ! $stmt instanceof Return_) { + $newStmts[] = new Expression($this->nodeFactory->createFuncCall('reset', [$array])); + } + + if ($stmt instanceof StmtsAwareInterface) { + $stmt->stmts = array_merge([$resetExpression], $stmt->stmts); + } + return $newStmts; }