Maison >développement back-end >Problème PHP >Comment les variables PHP sont-elles implémentées ?

Comment les variables PHP sont-elles implémentées ?

coldplay.xixi
coldplay.xixioriginal
2020-08-21 11:15:071998parcourir

Comment implémenter les variables PHP : déclarez d'abord un pointeur zval et demandez un morceau de mémoire ; puis définissez la valeur sur bar via la macro [ZVAL_STRING], enfin ajoutez ce zval à la table des symboles actuelle, et définissez ; son étiquette est foo.

Comment les variables PHP sont-elles implémentées ?

[Recommandations d'apprentissage associées : Tutoriel graphique php]

Comment implémenter des variables php :

Introduction

Dans l'implémentation officielle de PHP, toutes les variables sont enregistrées en utilisant la même structure de données (zval), et cette structure représente également chaque variable dans les données PHP. taper. Il contient non seulement la valeur de la variable, mais également le type de la variable. C'est le cœur du typage faible de PHP.

  • Type scalaire : booléen, entier, float(double), chaîne

  • Type composite : tableau, objet

  • Types spéciaux : ressource, NULL

Structure de stockage des variables

PHP utilise la structure zval dans le noyau pour stocker les variables. , sa définition est dans le fichier Zend/zend.h. Il est court et concis, composé de seulement quatre membres :

struct _zval_struct {
    zvalue_value value; /* 变量的值 */
    zend_uint refcount__gc;
    zend_uchar type;    /* 变量当前的数据类型 */
    zend_uchar is_ref__gc;
};
typedef struct _zval_struct zval;
//在Zend/zend_types.h里定义的:
typedef unsigned int zend_uint;
typedef unsigned char zend_uchar;
  • refcount__gc signifie nombre de références 1

  • <.>
  • is_ref__gc indique s'il s'agit d'une référence 0

  • value stocke la valeur de la variable

  • tapez le type spécifique de la variable

Type de variable

Le champ de type de la structure zval est le champ le plus critique pour implémenter un typage faible. La valeur de type peut. être :

, IS_NULL, IS_BOOL, IS_LONG, IS_DOUBLE, IS_STRING, IS_ARRAY, IS_OBJECT. C'est facile à comprendre littéralement. Ce ne sont que des identifiants uniques de types, et différentes valeurs sont stockées dans le champ de valeur en fonction de différents types. De plus, les types définis avec eux sont IS_RESOURCE et IS_CONSTANT. IS_CONSTANT_ARRAY

Exemple

<?php
$foo = &#39;bar&#39;;
?>

Ce qui précède est un exemple de langage PHP, créez une variable et définissez sa valeur sur 'bar', étapes : Créez une structure zval et définissez son type. Définissez la valeur sur « bar ». Ajoutez-le à la table des symboles de la portée actuelle afin que les utilisateurs puissent utiliser cette variable en PHP. Le code spécifique est :

{
    zval *fooval;
    MAKE_STD_ZVAL(fooval);
    ZVAL_STRING(fooval, "bar", 1);
    ZEND_SET_SYMBOL( EG(active_symbol_table) ,  "foo" , fooval);
}

Tout d'abord, nous déclarons un pointeur zval et demandons un morceau de mémoire. Définissez ensuite la valeur sur bar via la macro ZVAL_STRING. La fonction de la dernière ligne est d'ajouter ce zval à la table des symboles actuelle et de définir son étiquette comme foo, afin que l'utilisateur puisse l'utiliser via $foo dans le code.

Recommandations d'apprentissage associées :

programmation php (vidéo)

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!

Déclaration:
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