07-06-2010, 12:39 PM
Code PHP :
<?php
$variable = '123456';
echo debug_zval_dump($variable); // AFFICHE : string(6) "123456" refcount(2)
test1($variable); // (sans référence) AFFICHE : string(6) "123456" refcount(4)
test2($variable); // (par référence) AFFICHE : string(6) "123456" refcount(1)
function test1($variable)
{
echo debug_zval_dump($variable);
}
function test2(&$variable)
{
echo debug_zval_dump($variable);
}
?>
- je ne suis pas certain de comprendre le refcount()
- quelle fonction bouffe le moins de mémoire?
- la doc de php dit:
http://fr.php.net/manual/fr/function.deb...l-dump.php a écrit :Un refcount de 2, ici, est vraiment inattendu. Tout spécialement si on considère les exemples ci-dessus. Donc, que se passe-t-il ?
Lorsqu'une variable a une seule référence (faire $var1 avant qu'elle ne soit utilisée en tant qu'argument de la fonction debug_zval_dump()), le moteur PHP optimise la façon dont elle est passée à la fonction. En interne, PHP traite $var1 comme une référence (et donc, le refcount est incrémenté), et avec le cas où le passage par référence intervient, une copie est alors faite, mais uniquement au moment de l'écriture. Ceci est connu comme "la copie à l'écriture".
Donc, si debug_zval_dump() intervient pour écrire son unique paramètre (et il ne le fait pas), alors une copie est faite. Jusque-là, le paramètre demeure une référence, faisant que le refcount est incrémenté à 2 pour l'appel à la fonction.