Compréhension approfondie des principes et des variables PHP (Variables à l'intérieur de PHP)

angryTom
Libérer: 2023-04-07 16:24:01
avant
1923 Les gens l'ont consulté

Compréhension approfondie des principes et des variables PHP (Variables à lintérieur de PHP)

Peut-être que vous le savez, peut-être que vous ne le savez pas, PHP est un langage de script dynamique, faiblement typé. Le type dit faible signifie que PHP ne vérifie pas strictement le type de la variable (à proprement parler, PHP est un langage moyennement typé, cette partie sera décrite dans un prochain article), lors de la déclaration d'une variable , il n'est pas nécessaire d'indiquer explicitement le type de données qu'il enregistre :

<?php
  $var = 1; //int
  $var = "laruence"; //string
  $var = 1.0002; //float
  $var = array(); // array
  $var = new Exception(&#39;error&#39;); //object;
Copier après la connexion

Langage dynamique, c'est-à-dire que la structure du langage de PHP peut être modifiée au moment de l'exécution, par exemple, nous avons besoin au moment de l'exécution d'un fichier de définition de fonction qui provoque des modifications dynamiques de la table des fonctions du langage.

Le soi-disant langage de script signifie que PHP ne s'exécute pas de manière indépendante. Pour exécuter PHP, nous avons besoin d'un analyseur PHP :

/usr/bin/php -f example.php
Copier après la connexion

J'ai déjà mentionné dans mon article précédent que PHP est exécuté via Zend. (ZE, Zend Engine), ZE est écrit en C. Tout le monde sait que C est un langage fortement typé, c'est-à-dire que toutes les variables en C ne peuvent stocker qu'un seul type à partir du moment où il est déclaré jusqu'au type de destruction final. de données. Alors, comment PHP implémente-t-il les types faibles basés sur ZE ?

En PHP, toutes les variables sont enregistrées avec une structure -zval. Dans Zend/zend.h nous pouvons voir la définition de zval :

typedef struct _zval_struct {
    zvalue_value value;
    zend_uint refcount;
    zend_uchar type;
    zend_uchar is_ref;
  } zval;
Copier après la connexion

où zvalue_value est vrai. Il est maintenant temps de révéler la valeur de zval. clé pour sauvegarder les données.Comment PHP implémente-t-il les types faibles basés sur ZE ? Parce que zvalue_value est une union,

typedef union _zvalue_value {
    long lval;
    double dval;
    struct {
        char *val;
        int len;
    } str;
    HashTable *ht;
    zend_object_value obj;
} zvalue_value;
Copier après la connexion

Alors, comment cette structure stocke-t-elle plusieurs types en PHP ?

Les types de variables courants en PHP sont :

  • 1. Entier/virgule flottante/entier long/valeur booléenne, etc.

  • 2. Chaîne

  • 3. Tableau/tableau associatif

  • Objet

  • 5. Ressources

PHP stocke le type réel d'une variable en fonction du champ de type dans zval, puis choisit comment obtenir la valeur de zvalue_value en fonction du type. . Par exemple, pour les entiers et les valeurs booléennes :

   zval.type = IS_LONG;//整形
   zval.type = IS_BOOL;//布尔值
Copier après la connexion

obtenez simplement zval.value.lval, pour les valeurs booléennes lval∈(0|1); s'il s'agit d'une double précision, ou float Ensuite, il obtiendra le dval de zval.value.

Et si c'est une chaîne, alors :

   zval.type = IS_STRING
Copier après la connexion

A ce moment, ce sera :

zval.value.str

Et c'est également une structure, stockant la chaîne au format C et la longueur de la chaîne.

Pour les tableaux et les objets, le type correspond respectivement à

IS_ARRAY, IS_OBJECT

, et les correspondants sont zval.value.ht et obj Ce qui est spécial, c'est la ressource. En PHP, la ressource est une variable très spéciale. Toute variable qui n'appartient pas au type de variable intégré de PHP sera considérée comme une ressource à sauvegarder, comme un handle de base de données, un handle de fichier ouvert. , etc. . Pour les ressources :

   type = IS_RESOURCE
Copier après la connexion

À ce moment,

zval.value.lval

sera récupéré. À ce moment, lval est un indicateur entier, puis PHP utilisera cet indicateur dans PHP Query. ressources correspondantes dans une liste de ressources que vous avez créée (je présenterai cette partie dans un article séparé dans le futur, il vous suffit de savoir que le lval à ce moment semble être la valeur de décalage correspondant à la liste de ressources).

 ZEND_FETCH_RESOURCE(con, type, zval *, default, resource_name, resource_type);
Copier après la connexion
En empruntant un tel mécanisme, PHP implémente des types faibles, car pour ZE, il fait toujours face au même type, c'est-à-dire zval.

Pour plus de connaissances sur PHP, veuillez visiter le

Site Web PHP chinois

 !

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:www.laruence.com
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!