Manuel PHP
Précédent |  | Suivant

# debug_zval_dump

(PHP 4 >= 4.2.0, PHP 5)

debug_zval_dump -- Extrait une représentation sous forme de chaîne d'une valeur interne à Zend pour affichage

## Description

void debug_zval_dump ( mixed variable )

debug_zval_dump() extrait une représentation sous forme de chaîne d'une valeur interne à Zend pour affichage.

## Liste de paramètres

`variable`

  La variable à évaluer.

## Valeurs de retour

Aucune valeur n'est retournée.

## Exemples

Exemple 1. Exemple avec debug_zval_dump()

`<?php $var1 = 'Bonjour le monde !'; $var2 = ''; $var2 =& $var1; debug_zval_dump(&$var1); ?>`

L'exemple ci-dessus va afficher :

    string(18) "Bonjour le monde !" refcount(3)

> Faites attention avec `refcount` : La valeur `refcount` retournée par cette fonction n'est pas significative dans certaines circonstances. Par exemple, un développeur peut s'attendre avec l'exemple ci-dessus d'avoir un `refcount` de `2`. La troisième référence est créée lors de l'appel à la fonction debug_zval_dump().

> Ce comportement est encore plus fin lorsqu'une variable n'est pas passée par référence à la fonction debug_zval_dump(). Pour illustrer ceci, voici une version modifiée de l'exemple ci-dessus :

> Exemple 2.

> `<?php $var1 = 'Bonjour le monde !'; $var2 = ''; $var2 =& $var1; debug_zval_dump($var1); // non passée par référence, cette fois-ci ?>`

> L'exemple ci-dessus va afficher :

>     string(18) "Bonjour le monde !" refcount(1)

> Pourquoi `refcount(1)` ? Parce qu'une copie de `$var1` a été faite, lors de l'appel de la fonction.

> Cette fonction devient encore plus confuse lorsqu'une variable avec un `refcount` de `1` est passée (par copie/valeur) :

> Exemple 3.

> `<?php $var1 = 'Bonjour le monde !'; debug_zval_dump($var1); ?>`

> L'exemple ci-dessus va afficher :

>     string(18) "Bonjour le monde !" refcount(2)

> 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.

## Voir aussi

var_dump()
debug_backtrace()
Explication sur les références
Comptage des références et des alias (par Andi Gutmans)
Explication sur les références (par Derick Rethans)

Précédent | Sommaire | Suivant
Fonctions de gestion des variables | Niveau supérieur | doubleval