I have this piece of code:
$exists = false;
foreach ($outsiderTests as $key => $outsiderTest) {
$textExists = null;
foreach ($tests as $test) {
if ($outsiderTest->getName() == $test->getName()) {
$exists = true;
$existingTest = $test;
break;
} else
$exists = false;
}
var_dump($existingTest, $test);
}
As you can see, I want to see if there is an equivalent to an outsiderTest
in $tests
array. I thought I would have to save the existing equivalent $test
on another variable as it would be gone after the foreach
ends, but it does not.
The value of $existingTest
and $test
is the same when I dump them. This is cool, and makes me able to get rid of the mentioned $existingTest
variable, but makes me wonder if I am understanding PHP's loop functionality.
Doesn't the $test
variable only exist inside the foreach scope? Does PHP temporarily save the value of the last index the execution has run through?
CodePudding user response:
PHP's variable scope is explained here: https://www.php.net/manual/en/language.variables.scope.php
Effectively you have 2 scopes:
- The global scope
- The local function scope
So a loop variable will be accessible out of it's scope and will contain the last value it had. This is why you got this behaviour.
If you have a loop calling a function then you have multiple options:
- Declare the external variable with the
global
keyword inside the function. - Access globals with the
$GLOBALS
variable. - Pass the globals you need to your anonymous function with the
use ()
syntax.