# debug_zval_dump

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

debug_zval_dump — Extrait une représentation sous forme de chaîne de la structure interne d'une zval pour affichage

### Description

debug_zval_dump(mixed `$value`, mixed `...$values`): void

Extrait une représentation sous forme de chaîne de caractère d'un structure interne d'une zval (Zend value) pour affichage. Ceci est généralement utile pour comprendre ou déboguer les détails d'implémentation du moteur Zend ou d'extensions PHP.

### Liste de paramètres

`value`

  La variable où valeur à extraire.

`values`

  Variables ou valeurs supplémentaire à extraire.

### Valeurs de retour

Aucune valeur n'est retournée.

### Exemples

Exemple #1 Exemple avec debug_zval_dump()

`<?php
$var1 = 'Hello';
$var1 .= ' World';
$var2 = $var1;
debug_zval_dump($var1);
?>`

L'exemple ci-dessus va afficher :

    string(11) "Hello World" refcount(3)

> Note: Comprendre le `refcount`

> La valeur `refcount` affiché par cette fonction peut être surprenant sans une compréhension détaillé de l'implémentation du moteur.

> Le moteur Zend utilise le comptage de référence pour deux raisons différentes :

> - Optimiser l'usage de mémoire en utilisant une technique appelé "copy on write", où plusieurs variables tenant la même valeur pointe à la même copie en mémoire. Quand une de ces variables est modifié, elle pointe à une nouvelle copie en mémoire, et le comptage de référence de l'originale est réduit de 1.
> - Le pistage des variables qui ont été assigné ou passé par référence (voir Références Expliquées). Ce refcount est stocker dans un zval de référence séparé, pointant à la zval pour la valeur actuelle. Cette zval additionnelle n'est actuellement pas montré par debug_zval_dump().

> Car debug_zval_dump() prend son entrée comme un paramètre normal, passé par valeur, la technique de copy on write sera utilisé pour la passé: au lieu de copier les données, le refcount sera incrémenté de 1 pour la durée de vie de l'appel de la fonction. Si la fonction modifie le paramètre après l'avoir reçu, alors une copie sera fait ; comme elle n'en fait pas, elle affichera un refcount de 1 plus élevé que dans la portée d'appel.

> Le passage de paramètre empêche aussi debug_zval_dump() de montrer les variables qui ont été assigné par référence. Pour illustrer ceci, considérons une version légèrement modifiée de l'exemple ci-dessus :

> `<?php
> $var1 = 'Hello';
> $var1 .= ' World';
> // Pointe trois variables en tant que référence à la même valeur
> $var2 =& $var1;
> $var3 =& $var1;
> debug_zval_dump($var1);
> ?>`

> L'exemple ci-dessus va afficher :

>     string(11) "Hello World" refcount(2)

> Bien que $var1, $var2, et $var3 sont lié en tant que référence, seul la valeur est passé à debug_zval_dump(). Cette valeur est utilisé une seul fois par le jeu de références, et une fois à l'intérieur de debug_zval_dump(), ainsi il affiche un refcount de 2.

> Des complications supplémentaire émergent à cause des optimisations effectué par le moteur pour différent types de données. Certains types tel que les entiers n'utilise pas "copy on write", et donc n'affiche aucun refcount. Dans d'autre cas, le refcount montre d'autres copies utilisé en interne, tel que quand une chaîne littérale ou tableau est stocké comme une partie d'une instruction de code

### Voir aussi

- var_dump() - Affiche les informations d'une variable
- debug_backtrace() - Génère le contexte de débogage
- Explication sur les références
- » Explication sur les références (par Derick Rethans)