Maison développement back-end tutoriel php Compréhension approfondie des principes et des variables PHP (Variables à l'intérieur de PHP)

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

Oct 15, 2019 pm 01:35 PM
原理 变量

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Analyse de la fonction et du principe de nohup Analyse de la fonction et du principe de nohup Mar 25, 2024 pm 03:24 PM

Analyse du rôle et du principe de nohup Dans les systèmes d'exploitation Unix et de type Unix, nohup est une commande couramment utilisée pour exécuter des commandes en arrière-plan. Même si l'utilisateur quitte la session en cours ou ferme la fenêtre du terminal, la commande peut. continuent toujours à être exécutés. Dans cet article, nous analyserons en détail la fonction et le principe de la commande nohup. 1. Le rôle de nohup : Exécuter des commandes en arrière-plan : Grâce à la commande nohup, nous pouvons laisser les commandes de longue durée continuer à s'exécuter en arrière-plan sans être affectées par la sortie de l'utilisateur de la session du terminal. Cela doit être exécuté

Discussion approfondie sur les principes et les pratiques du cadre Struts Discussion approfondie sur les principes et les pratiques du cadre Struts Feb 18, 2024 pm 06:10 PM

Analyse des principes et exploration pratique du framework Struts. En tant que framework MVC couramment utilisé dans le développement JavaWeb, le framework Struts a de bons modèles de conception et une bonne évolutivité et est largement utilisé dans le développement d'applications au niveau de l'entreprise. Cet article analysera les principes du framework Struts et l'explorera avec des exemples de code réels pour aider les lecteurs à mieux comprendre et appliquer le framework. 1. Analyse des principes du framework Struts 1. Architecture MVC Le framework Struts est basé sur MVC (Model-View-Con

Compréhension approfondie du principe d'implémentation de l'insertion par lots dans MyBatis Compréhension approfondie du principe d'implémentation de l'insertion par lots dans MyBatis Feb 21, 2024 pm 04:42 PM

MyBatis est un framework de couche de persistance Java populaire qui est largement utilisé dans divers projets Java. Parmi elles, l'insertion par lots est une opération courante qui peut améliorer efficacement les performances des opérations de base de données. Cet article explorera en profondeur le principe de mise en œuvre de l'insertion par lots dans MyBatis et l'analysera en détail avec des exemples de code spécifiques. Insertion par lots dans MyBatis Dans MyBatis, les opérations d'insertion par lots sont généralement implémentées à l'aide de SQL dynamique. En construisant un S contenant plusieurs valeurs insérées

Que sont les variables d'instance en Java Que sont les variables d'instance en Java Feb 19, 2024 pm 07:55 PM

Les variables d'instance en Java font référence aux variables définies dans la classe, et non dans la méthode ou le constructeur. Les variables d'instance sont également appelées variables membres. Chaque instance d'une classe possède sa propre copie de la variable d'instance. Les variables d'instance sont initialisées lors de la création de l'objet et leur état est enregistré et conservé tout au long de la durée de vie de l'objet. Les définitions de variables d'instance sont généralement placées en haut de la classe et peuvent être déclarées avec n'importe quel modificateur d'accès, qui peut être public, privé, protégé ou le modificateur d'accès par défaut. Cela dépend de ce que nous voulons que ce soit

Comment obtenir des variables de la méthode PHP en utilisant Ajax ? Comment obtenir des variables de la méthode PHP en utilisant Ajax ? Mar 09, 2024 pm 05:36 PM

L'utilisation d'Ajax pour obtenir des variables à partir de méthodes PHP est un scénario courant dans le développement Web. Grâce à Ajax, la page peut être obtenue dynamiquement sans actualiser les données. Dans cet article, nous présenterons comment utiliser Ajax pour obtenir des variables à partir de méthodes PHP et fournirons des exemples de code spécifiques. Tout d’abord, nous devons écrire un fichier PHP pour gérer la requête Ajax et renvoyer les variables requises. Voici un exemple de code pour un simple fichier PHP getData.php :

Carte mentale de la syntaxe Python : compréhension approfondie de la structure du code Carte mentale de la syntaxe Python : compréhension approfondie de la structure du code Feb 21, 2024 am 09:00 AM

Python est largement utilisé dans un large éventail de domaines grâce à sa syntaxe simple et facile à lire. Il est crucial de maîtriser la structure de base de la syntaxe Python, à la fois pour améliorer l’efficacité de la programmation et pour acquérir une compréhension approfondie du fonctionnement du code. À cette fin, cet article fournit une carte mentale complète détaillant divers aspects de la syntaxe Python. Variables et types de données Les variables sont des conteneurs utilisés pour stocker des données en Python. La carte mentale affiche les types de données Python courants, notamment les entiers, les nombres à virgule flottante, les chaînes, les valeurs booléennes et les listes. Chaque type de données a ses propres caractéristiques et méthodes de fonctionnement. Opérateurs Les opérateurs sont utilisés pour effectuer diverses opérations sur les types de données. La carte mentale couvre les différents types d'opérateurs en Python, tels que les opérateurs arithmétiques, ratio

Une discussion approfondie sur les fonctions et les principes des outils Linux RPM Une discussion approfondie sur les fonctions et les principes des outils Linux RPM Feb 23, 2024 pm 03:00 PM

L'outil RPM (RedHatPackageManager) dans les systèmes Linux est un outil puissant pour installer, mettre à niveau, désinstaller et gérer les packages logiciels système. Il s'agit d'un outil de gestion de progiciels couramment utilisé dans les systèmes RedHatLinux et est également utilisé par de nombreuses autres distributions Linux. Le rôle de l'outil RPM est très important. Il permet aux administrateurs système et aux utilisateurs de gérer facilement les progiciels sur le système. Grâce à RPM, les utilisateurs peuvent facilement installer de nouveaux progiciels et mettre à niveau les logiciels existants.

Explication détaillée du principe du plug-in de pagination MyBatis Explication détaillée du principe du plug-in de pagination MyBatis Feb 22, 2024 pm 03:42 PM

MyBatis est un excellent framework de couche de persistance. Il prend en charge les opérations de base de données basées sur XML et les annotations. Il est simple et facile à utiliser. Il fournit également un mécanisme de plug-in riche. Parmi eux, le plug-in de pagination est l'un des plug-ins les plus fréquemment utilisés. Cet article approfondira les principes du plug-in de pagination MyBatis et l'illustrera avec des exemples de code spécifiques. 1. Principe du plug-in de pagination MyBatis lui-même ne fournit pas de fonction de pagination native, mais vous pouvez utiliser des plug-ins pour implémenter des requêtes de pagination. Le principe du plug-in de pagination est principalement d'intercepter MyBatis

See all articles