存储结构
和其它变量一样,PHP的数组也是一个zval。存储数据的哈希表存放在zval->value->ht中。
符号表操作
为实现可转换成整数的字符串键与整数键指向同一个元素,在哈希表操作的基础上封装了一层,对可转换成整数的字符串键转换成整数,然后调用zend_hash_index_*操作,否则调用zend_hash_*操作。这就是符号表操作。
用ZEND_HANDLE_NUMERIC处理整数字符串键:
|
|
其它符号表操作函数:
|
|
数组操作
初始化
|
|
插入和更新
|
|
星号表示类型名,可用类型名如下:
Type | Additional arguments |
---|---|
null | none |
bool | int b |
long | long n |
double | double d |
string | const char *str, int duplicate |
stringl | const char *str, uint length, int duplicate |
resource | int r |
zval | zval *value |
字符串长度的处理
上述操作对字符串键和字符串值的长度的要求不同。_ex函数要求传入字符串键的长度,此长度包含NUL字节。_stringl函数要求传入字符串值的长度,此长度不包含NUL字节。
栗子
|
|