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

# 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

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

Extrait une représentation sous forme de chaîne de caractères d'une 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 ou valeur à extraire.

`values`

  Variables ou valeurs supplémentaires à extraire.

### Valeurs de retour

Aucune valeur n'est retournée.

### Historique

Version | Description
--- | ---
8.4.0 | debug_zval_dump() indique désormais si un tableau est compacté (« packed »).

### 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ée par cette fonction peut être surprenante sans une compréhension détaillée 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ée "copy on write", où plusieurs variables tenant la même valeur pointent à la même copie en mémoire. Quand une de ces variables est modifiée, 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ées ou passées par référence (voir Références Expliquées). Ce refcount est stocké dans un zval de référence séparé, pointant à la zval pour la valeur actuelle. Cette zval additionnelle n'est actuellement pas montrée 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ée pour la passer : 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 faite ; 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ées 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 soient liés en tant que référence, seule la valeur est passée à debug_zval_dump(). Cette valeur est utilisée une seule 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émentaires émergent à cause des optimisations effectuées par le moteur pour différents types de données. Certains types tels que les entiers n'utilisent pas "copy on write", et donc n'affichent aucun refcount. Dans d'autres cas, le refcount montre d'autres copies utilisées en interne, tels 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 une trace de la pile d'appels
- Explication sur les références
- » Explication sur les références (par Derick Rethans)

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open