You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
PHPCS uses for/foreach/while loops a lot and quite often the variables created for those loops are not destroyed after the loop has finished.
This can cause confusion is the variable name is re-used for something else later on in the same code flow.
It can also cause problems if a variable name is re-used and conditionally set later on in the same code flow as the wrong variable may end up being used.
To prevent this it would be good to review all code for these code patterns and to add unset()s where appropriate.
Examples:
for ($i = $stackPtr; $i < $phpcsFile->numTokens; $i++) {
// Do something...
}
+unset($i);
foreach ($patterns as $pattern => $type) {
// Do something...
}
+unset($pattern, $type);
while (($ptr = $phpcsFile->findNext(Tokens::$ooScopeTokens, ($ptr + 1)) !== false) {
// Do something...
}
+unset($ptr);
Notes:
If a loop is at the end of a function, no unset is needed as the variable will be destroyed once the function ends.
If a variable as-it-is-at-the-end-of-the-loop is deliberately re-used later on, the code does not need an update, though it might be helpful at times to add a comment documenting this.
Planning and how to contribute
This task doesn't need to be done in one go.
Anyone who wants to contribute to this task can claim a single file, or a group of files to review by leaving a comment in this thread.
We'll keep track of what's (being) done by listing what's been claimed/reviewed below.
Claimed
Nothing yet
Done
Nothing yet
Excluded from this task
Code which doesn't have dedicated tests.
Files in the src/Tokenizer directory.
Sniffs which are specific to JS/CSS (as those will be removed in PHPCS 4.0 anyway).
The text was updated successfully, but these errors were encountered:
Inspired by the conversation in this PR review thread.
PHPCS uses
for
/foreach
/while
loops a lot and quite often the variables created for those loops are not destroyed after the loop has finished.This can cause confusion is the variable name is re-used for something else later on in the same code flow.
It can also cause problems if a variable name is re-used and conditionally set later on in the same code flow as the wrong variable may end up being used.
To prevent this it would be good to review all code for these code patterns and to add
unset()
s where appropriate.Examples:
for ($i = $stackPtr; $i < $phpcsFile->numTokens; $i++) { // Do something... } +unset($i);
foreach ($patterns as $pattern => $type) { // Do something... } +unset($pattern, $type);
while (($ptr = $phpcsFile->findNext(Tokens::$ooScopeTokens, ($ptr + 1)) !== false) { // Do something... } +unset($ptr);
Notes:
unset
is needed as the variable will be destroyed once the function ends.Planning and how to contribute
This task doesn't need to be done in one go.
Anyone who wants to contribute to this task can claim a single file, or a group of files to review by leaving a comment in this thread.
We'll keep track of what's (being) done by listing what's been claimed/reviewed below.
Claimed
Nothing yet
Done
Nothing yet
Excluded from this task
src/Tokenizer
directory.The text was updated successfully, but these errors were encountered: