Question: I have a coworker that I noticed was using his foreachs in the following fashion:

```
foreach ($var as $var) {
    // do stuff here
}

```

I have tested the code above and it works correctly to my surprise. Would the PHP gurus like to hop in and tell me why this is wrong? It feels very wrong.

Answer: 
Because it changes the value of `$var`. After the `foreach()` it's no longer an array but is set to the last value in the array.

```
$var = array('apple', 'orange');
foreach ($var as $var) {
    echo $var."<br/>";
}
echo $var; //orange

```

If you don't want to change the variable's value, it'll need to be a different variable name:

```
$var = array('apple', 'orange');
foreach ($var as $fruit) {
    echo $fruit."<br/>";
}
echo $var; //array

```

As @UselessIntern pointed out, it's fine if you're not going to use the variable after looping through it, but it's definitely not encouraged because it can lead to confusion.

As @PLB pointed out, it iterates over a copy of the `$var` not `$var` itself. So every iteration the value of `$var` is changing, but it doesn't break the loop because it's looping over the copy that was created.
Check this expression:

```
$x = array(1,2,3);
foreach ($x as $x) {
    echo $x; //prints 123
}

```

What is happening here is that the `foreach` extracts the first element of array `$x` and overrides into `$x` itself. However the array variable `$x` which was on the left side of the `as` keyword remains in internal scope of the `foreach` argument which is why the looping works without problems. 

Once the loop completes the `$x` which was internal to the `foreach` (the array) loses scope and no longer exists, and what remains is the `$x variable` which now contains the last element of the original `$x array`. In this case that would be `3`.