php变量结构图
2016-03-10 16:36:46 2 举报
PHP变量结构图展示了PHP中变量的基本结构和组织方式。在图中,我们可以看到变量由标识符、类型和值组成。标识符是变量的名称,用于引用变量。类型指定了变量的数据类型,如整数、浮点数、字符串等。值是存储在变量中的实际数据。 PHP中的变量可以在不同的作用域中使用。全局变量在整个脚本中都可见,而局部变量仅在声明它们的函数或代码块内可见。此外,PHP还支持可变变量,它们允许我们动态地改变变量名。 通过使用PHP的变量,我们可以方便地存储和操作数据。变量的值可以随时更改,这使得PHP成为一种灵活且强大的编程语言。无论是处理表单数据、存储用户信息还是执行计算任务,PHP的变量都能提供便利和灵活性。
作者其他创作
大纲/内容
value
struct _zval_struct { zvalue_value value; /*变量值 */ zend_uint refcount__gc; //变量被引用次数 zend_uchar type; /* 变量类型 */ zend_uchar is_ref__gc; //变量是否为引用变量};
typedef union _zend_value {\tzend_long lval;\t\t\t\t/* long value */\tdouble dval;\t\t\t\t/* double value */\tzend_refcounted *counted;\tzend_string *str;\tzend_array *arr;\tzend_object *obj;\tzend_resource *res;\tzend_reference *ref;\tzend_ast_ref *ast;\tzval *zv;\tvoid *ptr;\tzend_class_entry *ce;\tzend_function *func;\tstruct {\t\tuint32_t w1;\t\tuint32_t w2;\t} ww;} zend_value;
arData
typedef struct bucket { ulong h;// 对char *key进行hash后的值,或者是用户指定的数字索引值 uint nKeyLength;//hash关键字的长度,如果数组索引为数字,此值为0 void *pData;//指向value,一般是用户数据的副本,如果是指针数据,则指向pDataPtr void *pDataPtr;//如果是指针数据,此值会指向真正的value,同时上面pData会指向此值 struct bucket *pListNext; // 整个hash表的下一元素 struct bucket *pListLast;// 整个哈希表该元素的上一个元素 struct bucket *pNext;// 存放在同一个hash Bucket内的下一个元素 struct bucket *pLast; // 同一个哈希bucket的上一个元素 const char *arKey; // 保存当前值所对于的key字符串,这个字段只能定义在最后,实现变长结构体} Bucket;
//hash 结构定义typedef struct _hashtable { uint nTableSize;// hash Bucket的长度,最小为8,以2x增长。 uint nTableMask;// // nTableSize-1 , 索引取值的优化 uint nNumOfElements;//// hash Bucket中当前存在的元素个数,count()函数会直接返回此值 ulong nNextFreeElement;//下一个数字索引的位置 Bucket *pInternalPointer;// 当前遍历的指针(foreach比for快的原因之一) /* Used for element traversal */ Bucket *pListHead;// 存储数组头元素指针 Bucket *pListTail;// 存储数组尾元素指针 Bucket **arBuckets;// 存储hash数组 dtor_func_t pDestructor;//在删除元素时执行的回调函数,用于资源的释放 zend_bool persistent; //指出了Bucket内存分配的方式。 unsigned char nApplyCount;// 标记当前hash Bucket被递归访问的次数(防止多次递归) zend_bool bApplyProtection;// 标记当前hash桶允许不允许多次访问,不允许时,最多只能递归3次 }
typedef struct _Bucket {\tzval val;\tzend_ulong h; /* 哈希值 */\tzend_string *key; /* 字符串key或者是null */} Bucket;
typedef union _zvalue_value { long lval; /* long value php 数字 布尔 资源 */ double dval; /* double value php 浮点数 */ struct { /* php 字符串 */ char *val; int len; } str; HashTable *ht; /* hash table value php 数组*/ zend_object_value obj; //对象 zend_ast *ast; //} zvalue_value;
zval
zend_value
pDataPtr
arBuckets
0 条评论
下一页