Clarification sur ZVals

Je lisais ceci: http://www.dereleased.com/2011/04/27/the-importance-of-zvals-and-circular-references/

Et il y a un exemple qui m'a perdu un peu.

$foo = &$bar; $bar = &$foo; $baz = 'baz'; $foo = &$baz; var_dump($foo, $bar); /* ssortingng(3) "baz" NULL */ 

Si vous avez suivi, cela devrait avoir un sens absolu. $ foo est créé et pointé vers un location ZVal identifié par $ bar; Lorsque $ bar est créé, il pointe au même endroit $ foo était pointu. Cette position, bien sûr, est nulle. Lorsque $ foo est réaffecté, la seule chose qui change est à laquelle ZVal $ foo pointe; Si nous avions atsortingbué une valeur différente à $ foo en premier, alors $ bar conserverait toujours cette valeur.

J'ai appris à programmer dans C. Je comprends que PHP est différent et qu'il utilise ZVals au lieu des locations de memory comme reference. Mais lorsque vous exécutez ce code:

 $foo = &$bar; $bar = &$foo; 

Il me semble qu'il y aurait deux ZVals. En C, il y aurait deux locations de memory (et les valeurs seraient de l'location de memory opposé).

Quelqu'un peut-il expliquer?