zoukankan      html  css  js  c++  java
  • php 变量原理

    1.php作为一种弱类型语言,不需要显式的指明变量的类型,但是php变量也是有类型的,php变量包含以下8种变量(三大类)

      a.标量类型:boolean,integer,float(double),string

      b.复合类型:array,object

      c.特殊类型:resource,null

    2.php使用c语言实现变量的原理

      a.变量存储结构    

    typedef struct _zval_struct zval;
    ...
    struct _zval_struct {
        /* Variable information */
        zvalue_value value;     /*存储变量的值,是一个union类型*/
        zend_uint refcount__gc;/*变量的引用计数,默认为1*/
        zend_uchar type;    /*变量的类型,为IS_NULL、IS_BOOL、IS_LONG、IS_DOUBLE、IS_STRING、IS_ARRAY、IS_OBJECT和IS_RESOURCE之一*/
        zend_uchar is_ref__gc;/*表示是否为引用*/
    };
    

       b.存储变量值得zvalue_value如下

    typedef union _zvalue_value {
        long lval;                  /* long value */
        double dval;                /* double value */
        struct {
            char *val;
            int len;
        } str;
        HashTable *ht;              /* hash table value */
        zend_object_value obj;
    } zvalue_value;
    

     这里使用union而不是struct是为了节省内存空间,以为一个变量同一时间只能表示一种类型

    参考资料:tipi开源项目http://www.php-internals.com/book/?p=chapt03/03-01-00-variables-structure

  • 相关阅读:
    高斯消元
    Luogu P2068 统计和
    Luogu P1892 [BOI2003]团伙
    Luogu P2866 [USACO06NOV]糟糕的一天Bad Hair Day
    Luogu P3916 图的遍历
    Luogu P1041 [2003NOIP提高组]传染病控制
    Luogu P3901 数列找不同
    Luogu 2951 捉迷藏Hide and Seek
    Luogu P1550 打井Watering Hole
    洛谷——P1044 栈
  • 原文地址:https://www.cnblogs.com/hjyang2012/p/5303859.html
Copyright © 2011-2022 走看看