中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中的變量結構體實例用法

發布時間:2021-08-20 03:56:43 來源:億速云 閱讀:141 作者:chen 欄目:開發技術

本篇內容主要講解“PHP中的變量結構體實例用法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“PHP中的變量結構體實例用法”吧!

PHP5 中的 zval

// 1. zval
typedef struct _zval_struct {
 zvalue_value value;
 zend_uint refcount__gc;
 zend_uchar type;
 zend_uchar is_ref__gc;
} zval;
// 2. zvalue_value
typedef union _zvalue_value {
 long lval;  // 用于 bool 類型、整型和資源類型
 double dval; // 用于浮點類型
 struct {  // 用于字符串
  char *val;
  int len;
 } str;
 HashTable *ht; // 用于數組
 zend_object_value obj; // 用于對象
 zend_ast *ast; // 用于常量表達式(PHP5.6 才有)
} zvalue_value;
// 3. zend_object_value
typedef struct _zend_object_value {
 zend_object_handle handle;
 const zend_object_handlers *handlers;
} zend_object_value;
// 4. zend_object_handle
typedef unsigned int zend_object_handle;

多數文章,在提到PHP5 變量結構體的時候,都提到:sizeof(zval) == 24, sizeof(zvalue_value) == 16,實際上這個論述并不準確,在 CPU 為 64bit 時,這個結果是正確的。

但當 CPU 為32bit 時: sizeof(zval) == 16, sizeof(zvalue_value) == 8,主要因為 CPU 為 64bit 時,指針占用8個字節,而 32bit時,指針為4個字節。

PHP 7 中的 zval

// 1. zval
struct _zval_struct {
 zend_value  value;   /* value */
 union {
  struct {
   ZEND_ENDIAN_LOHI_4(
    zend_uchar type,   /* active type */
    zend_uchar type_flags,
    zend_uchar const_flags,
    zend_uchar reserved)  /* call info for EX(This) */
  } v;
  uint32_t type_info;
 } u1;
 union {
  uint32_t  next;     /* hash collision chain */
  uint32_t  cache_slot;   /* literal cache slot */
  uint32_t  lineno;    /* line number (for ast nodes) */
  uint32_t  num_args;    /* arguments number for EX(This) */
  uint32_t  fe_pos;    /* foreach position */
  uint32_t  fe_iter_idx;   /* foreach iterator index */
  uint32_t  access_flags;   /* class constant access flags */
  uint32_t  property_guard;  /* single property guard */
 } u2;
};
// 2. zend_value
typedef union _zend_value {
 zend_long   lval;    /* long value */
 double   dval;    /* double value */
 zend_refcounted *counted;
 zend_string  *str;
 zend_array  *arr;
 zend_object  *obj;
 zend_resource *res;
 zend_reference *ref;
 zend_ast_ref  *ast;
 zval    *zv;
 void    *ptr;
 zend_class_entry *ce;
 zend_function *func;
 struct {
  uint32_t w1;
  uint32_t w2;
 } ww;
} zend_value;

PHP 7的看似很多,但其實更簡單了,不論 CPU 是32bit 還是 64bit,sizeof(zval) 永遠都是等于 16。
主要看 zend_value 中的 ww,是兩個 uint32_t,這個永遠是 8 個字節,所以 sizeof(zend_value) == 8,因此 sizeof(zval) == 16。

所以 PHP7 新特性提到的節省內存這點上,在 32bit 系統中,PHP5 => PHP7 并無變化。

順便說下 sizeof,不能當做函數,雖然寫法像函數,這個數值會在編譯期就確定好,非運行期。類似編譯預處理。

到此,相信大家對“PHP中的變量結構體實例用法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

肃南| 延津县| 青州市| 阳山县| 江津市| 昭苏县| 长治县| 亚东县| 拉孜县| 汨罗市| 宁德市| 大方县| 修武县| 西昌市| 晋江市| 汕尾市| 大同市| 怀宁县| 南溪县| 咸阳市| 太仆寺旗| 宁阳县| 绥阳县| 比如县| 邢台县| 邢台市| 怀安县| 伊金霍洛旗| 化州市| 辉县市| 肥东县| 抚顺县| 金阳县| 张家港市| 怀仁县| 海淀区| 纳雍县| 开封县| 永定县| 礼泉县| 崇阳县|