Que signifie PHP ZVAL ?

coldplay.xixi
Libérer: 2023-03-01 20:18:02
original
4422 Les gens l'ont consulté

PHP ZVAL est l'une des structures de données les plus importantes de PHP. Elle contient des informations sur les valeurs et les types de variables en PHP. Il s'agit d'une structure de base [struct _zval_struct (valeur zvalue_value type zend_uchar). )] .

Que signifie PHP ZVAL ?

PHP ZVAL signifie :

Structure de base de ZVAL

Zval est l'une des structures de données les plus importantes en PHP (une autre structure de données importante est hash table), qui contient des informations sur les valeurs et les types de variables en PHP.

C'est une struct, la structure de base est :

struct _zval_struct {
    zvalue_value value;     /* 存储变量的值*/
    zend_uint refcount__gc;  /* 表示引用计数 */
    zend_uchar type;          /* 变量具体的类型 */
    zend_uchar is_ref__gc;    /* 表示是否为引用 */
};
typedef struct _zval_struct zval;
Copier après la connexion

Parmi eux :

1, zval_value value

La valeur réelle de la variable

, plus précisément une union de zvalue_value :

typedef union _zvalue_value {
    long lval;                  /* long value */
    double dval;                /* double value */
    struct {                    /* string */
        char *val;
        int len;
    } str;
    HashTable *ht;              /* hash table value,used for array */
    zend_object_value obj;      /* object */
} zvalue_value;
Copier après la connexion

2, zend_uint refcount__gc

Cette valeur est en fait un compteur pour enregistrer le nombre de variables (ou symboles, symboles) qu'il y a. Tous les symboles sont stockés dans la table des symboles (table des symboles) Différentes étendues utilisent des symboles différents (nous en discuterons). ceci plus tard) pointe vers le zval.

Lorsqu'une variable est générée, son refcount=1. Une opération d'affectation typique telle que a=b augmentera le refcount de zval de 1, et l'opération de non-définition le diminuera de 1 en conséquence. Avant PHP5.3, le mécanisme de comptage de références était utilisé pour implémenter GC Si le refcount d'un zval était inférieur à 0, le moteur Zend penserait qu'il n'y avait aucune variable pointant vers le zval, et libérerait donc l'espace mémoire occupé par. le zval.

Mais parfois, les choses ne sont pas si simples. Nous verrons plus tard que le simple mécanisme de comptage de références ne peut pas GC le zval référencé circulairement, même si la variable pointant vers le zval a été non définie, ce qui entraîne une fuite de mémoire (Memory Leak).

3. zend_uchar type

Ce champ est utilisé pour indiquer le type réel de la variable. Lorsque nous avons commencé à apprendre PHP, nous savions déjà que les variables PHP incluent quatre classes scalaires (bool, int, float, string), deux types composites (array, object) et deux types spéciaux (resource et NULL).

Dans zend, ces types correspondent aux macros suivantes (emplacement du code phpsrc/Zend/zend.h) :

#define IS_NULL     0
#define IS_LONG     1
#define IS_DOUBLE   2
#define IS_BOOL     3
#define IS_ARRAY    4
#define IS_OBJECT   5
#define IS_STRING   6
#define IS_RESOURCE 7
#define IS_CONSTANT 8
#define IS_CONSTANT_ARRAY   9
#define IS_CALLABLE 10
Copier après la connexion

4, is_ref__gc

Ce champ permet de marquer si la variable est une variable de référence. Pour les variables ordinaires, la valeur est 0 et pour les variables de référence, la valeur est 1. Cette variable affectera le partage, la séparation, etc. de zval. Nous en discuterons plus tard.

Comme son nom l'indique, ref_count__gc et is_ref__gc sont deux champs très importants requis par le mécanisme GC de PHP. Les valeurs de ces deux champs peuvent être visualisées via des outils de débogage tels que xdebug.

Recommandations d'apprentissage associées : Programmation PHP de l'entrée à la maîtrise

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!