ホームページ  >  記事  >  バックエンド開発  >  PHP ZVAL とはどういう意味ですか?

PHP ZVAL とはどういう意味ですか?

coldplay.xixi
coldplay.xixiオリジナル
2020-07-02 09:38:264369ブラウズ

PHP ZVAL は、PHP で最も重要なデータ構造の 1 つです。PHP の変数の値と型に関する情報が含まれています。構造体です。基本的な構造は [struct _zval_struct (zvalue_value value zend_uchar type )] 。

PHP ZVAL とはどういう意味ですか?

#PHP ZVAL の意味:

ZVAL の基本構造 #Zval は PHP で最も重要なデータ構造の 1 つ (もう 1 つの重要なデータ構造は

ハッシュ テーブル

)、PHP の変数の値と型に関する情報が含まれています。 これは構造体であり、基本的な構造は次のとおりです:

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

その中には:

1、

zval_value value

変数の実際の値、特に

zvalue_value

:<pre class="brush:php;toolbar:false">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;</pre>

2,

の和集合zend_uint refcount__gc

この値は実際には、シンボル テーブル (シンボル テーブル) に存在する変数 (またはシンボル、シンボル、すべてのシンボル) の数を保存するために使用されるカウンターです。異なるスコープは異なるシンボルテーブルを使用します。これについては後で説明します) zval を指します。

変数が生成されると、その refcount=1 になります。a=b などの一般的な代入操作では zval の refcount が 1 ずつ増加し、設定解除操作ではそれに応じて 1 ずつ減少します。 PHP5.3 より前では、GC の実装に参照カウント メカニズムが使用されていました。zval の refcount が 0 未満の場合、Zend エンジンは zval を指す変数がないと判断し、占有されていたメモリ領域を解放していました。ズヴァルによって。

しかし、物事はそれほど単純ではない場合もあります。 zval を指す変数が設定されていない場合でも、単純な参照カウント メカニズムでは循環参照される zval を GC できず、その結果メモリ リーク (メモリ リーク) が発生することが後でわかります。

3.

zend_uchar type

##このフィールドは、実際のタイプを示すために使用されます。変数。 PHP の学習を始めたとき、PHP の変数には 4 つのスカラー クラス (bool、int、float、string)、2 つの複合型 (配列、オブジェクト)、および 2 つの特殊な型 (リソースと NULL) が含まれていることはすでに知っていました。

zend 内では、これらの型は次のマクロに対応します (コードの場所

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

# 4.

is_ref__gc

このフィールドは、変数が参照変数であるかどうかをマークするために使用されます。通常の変数の場合は値が 0、参照変数の場合は値が 1 になります。この変数は、zval の共有、分離などに影響します。これについては後で説明します。

名前が示すように、

ref_count__gc

is_ref__gc

は、PHP の GC メカニズムに必要な 2 つの非常に重要なフィールドです。これら 2 つのフィールドの値は、チェックで渡すことができます。 xdebug などのデバッグ ツール。

関連する学習の推奨事項:

PHP プログラミングの入門から熟練度まで

以上がPHP ZVAL とはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。