register_globals=off was implemented to eliminate the issue of variable poisoning.
Imagine you have a script called myscript.php that looks like this ...
<?
do {
echo "<BR>$i";
$i++;
} while ($i < 10);
?>
... and you called it like this ...
<A HREF="myscript.php">myscript</A>
... it would echo this
1
2
3
4
5
6
7
8
9
.. but if I call the script like this with register globals off ...
<A HREF="myscript.php?i=5">myscript</A>
... it would echo
5
6
7
8
9
With register_globals=off, the script would not accept my GET variable, and I would not be able to overwrite the value of $i, so it would run normaly.