Heim  >  Artikel  >  Backend-Entwicklung  >  Wie werden PHP-Variablen implementiert?

Wie werden PHP-Variablen implementiert?

coldplay.xixi
coldplay.xixiOriginal
2020-08-21 11:15:071965Durchsuche

So implementieren Sie PHP-Variablen: Deklarieren Sie zunächst einen ZVAL-Zeiger und wenden Sie ihn auf einen Speicherbereich an. Setzen Sie dann den Wert über das Makro [ZVAL_STRING] auf bar. Fügen Sie schließlich den ZVAL zur aktuellen Symboltabelle hinzu und definieren Sie seine Bezeichnung in foo.

Wie werden PHP-Variablen implementiert?

【Verwandte Lernempfehlung: php-Grafik-Tutorial

So implementieren Sie PHP-Variablen:

Einführung

In der offiziellen PHP-Implementierung verwenden alle Variablen dieselbe Datenstruktur (zval) zu speichern, und diese Struktur repräsentiert auch verschiedene Datentypen in PHP. Es enthält nicht nur den Wert der Variablen, sondern auch den Typ der Variablen. Dies ist der Kern der schwachen Typisierung von PHP.

  • Skalare Typen: boolean, integer, float(double), string

  • Composite-Typen: Array, Objekt

  • Sondertypen: Ressource, NULL

Speicherstruktur von Variablen

PHP Variablen werden im Kernel über die zval-Struktur gespeichert. Sie ist kurz und prägnant und besteht aus nur vier Mitgliedern:

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 bedeutet Referenzanzahl 1

  • is_ref__gc Gibt an, ob es sich um eine Referenz 0 handelt.

  • Wert speichert den Wert der Variablen. Geben Sie den spezifischen Typ der Variablen ein Das kritischste Feld zur Implementierung schwacher Typisierung, Typ. Die Werte von können sein:

    ,
  • ,
  • ,

    ,

    ,
  • ,
,

. Es ist leicht zu verstehen, dass es sich nur um eindeutige Typenbezeichner handelt, und je nach Typ werden unterschiedliche Werte im Wertfeld gespeichert. Darüber hinaus sind die damit definierten Typen und .

IS_NULLBeispielIS_BOOLIS_LONG

<?php
$foo = &#39;bar&#39;;
?>
IS_DOUBLEDas Obige ist ein Beispiel für die PHP-Sprache. Erstellen Sie eine Variable und legen Sie ihren Wert auf „bar“ fest. Schritte: Erstellen Sie eine ZVAL-Struktur und legen Sie ihren Typ fest. Wert auf „bar“ setzen. Fügen Sie es der Symboltabelle des aktuellen Bereichs hinzu, damit Benutzer diese Variable in PHP verwenden können. Der spezifische Code lautet: IS_STRING
{
    zval *fooval;
    MAKE_STD_ZVAL(fooval);
    ZVAL_STRING(fooval, "bar", 1);
    ZEND_SET_SYMBOL( EG(active_symbol_table) ,  "foo" , fooval);
}
IS_ARRAYZuerst deklarieren wir einen ZVAL-Zeiger und beantragen einen Teil des Speichers. Setzen Sie dann den Wert über das ZVAL_STRING-Makro auf bar. Die Funktion der letzten Zeile besteht darin, diesen zval zur aktuellen Symboltabelle hinzuzufügen und seine Bezeichnung als foo zu definieren, damit Benutzer ihn über $foo im Code verwenden können. IS_OBJECTIS_RESOURCEIS_CONSTANTVerwandte Lernempfehlungen: IS_CONSTANT_ARRAYphp-Programmierung

(Video)

Das obige ist der detaillierte Inhalt vonWie werden PHP-Variablen implementiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn