PHP内核API

来源:互联网 发布:2016年淘宝考试答案 编辑:程序博客网 时间:2024/05/18 00:16

重要的宏:

EG():是excutor_global的简写,这个宏可以用来访问符号表,函数,资源信息和常量

CG():是 compile_global的简写,用来访问核心全局变量。

PG():PHP全局变量。我们知道php.ini会映射一个或者多个PHP全局结构。举几个使用这个宏的例子:PG(register_globals),PG(safe_mode), PG(memory_limit)

FG():文件全局变量。大多数文件I/O或相关的全局变量的数据流都塞进标准扩展出口结构。

重要的数据类型:

Zend/zend.h中:

zvalue_value

zval

Zend/zend_hash.h中:

Bucket

HashTable




main/ 

 

 

 

 

 

Zend/

 

zend.c:

宏:CG(function_table)

 


Zeng/zeng_types.h :定义内核使用的基本数据类型

_zval_struct的别名zval就定义在这里


Zend/zend_hash.h HashTable的API


 

创建并初始化一个HashTable

int zend_hash_init(    HashTable *ht,    uint nSize,    hash_func_t pHashFunction,    dtor_func_t pDestructor,    zend_bool persistent);


hashtable申请内存:ALLOC_HASHTABLE(ht)

添加&&修改


int zend_hash_add(    HashTable *ht,      //待操作的ht    char *arKey,            //索引,如"my_key"    uint nKeyLen,       //字符串索引的长度,如6    void **pData,       //要插入的数据,注意它是void **类型的。int *p,i=1;p=&i,pData=&p;。    uint nDataSize,    void *pDest         //如果操作成功,则pDest=*pData;); int zend_hash_update(    HashTable *ht,    char *arKey,    uint nKeyLen,    void *pData,    uint nDataSize,    void **pDest); int zend_hash_index_update(    HashTable *ht,    ulong h,    void *pData,    uint nDataSize,    void **pDest); int zend_hash_next_index_insert(    HashTable *ht,    void *pData,    uint nDataSize,    void **pDest);


查找:

int zend_hash_find(HashTable *ht, char *arKey, uint nKeyLength,void **pData);int zend_hash_index_find(HashTable *ht, ulong h, void **pData);


检测某个key是否存在:

int zend_hash_exists(HashTable *ht, char *arKey, uint nKeyLen);int zend_hash_index_exists(HashTable *ht, ulong h);


Zend/zend_hash.h

EG(function_table) = CG(function_table);EG(class_table) = CG(class_table);


0 0