实现类似isset($array[$value]) 功能,php代码如下 error,        2 => warning,        3 => info,        4 => debug,    );    publicfunctionsetlevel($level) {if (!isset(self::$levels)) {            thrownewexception(level is not allowed);        }    }}
c 代码如下php_method(slash_log, setlevel) {    long level;    zval *levels;    zend_class_entry *ce;    hashtable *levels_ht;    ce = z_objce_p(getthis());    if (zend_parse_parameters(zend_num_args() tsrmls_cc, l, &level) == failure)    {        php_error_docref(null tsrmls_cc, e_warning, invalid argument);        return_false;    }    levels = zend_read_static_property(ce, zend_strl(sl_p_levels), 0 tsrmls_dc);    levels_ht = z_arrval_p(levels);    if (!zend_hash_index_exists(levels_ht, level)) {        php_error_docref(null tsrmls_cc, e_warning, level is not allowed);        return_false;    }    zend_update_property_long(ce, getthis(), zend_strl(sl_p_level), level tsrmls_cc);    return_true;}
上面的例子中,主要是使用 zend_hash_index_exists 方法,关于操作 hash table 的有一系列的方法在 zend/zend_hash.h
zend_api int zend_hash_add_empty_element(hashtable *ht, constchar *arkey, uint nkeylength);zend_api int zend_hash_del_key_or_index(hashtable *ht, constchar *arkey, uint nkeylength, ulong h, int flag);zend_api int zend_hash_find(const hashtable *ht, constchar *arkey, uint nkeylength, void **pdata);zend_api int zend_hash_quick_find(const hashtable *ht, constchar *arkey, uint nkeylength, ulong h, void **pdata);zend_api int zend_hash_index_find(const hashtable *ht, ulong h, void **pdata);zend_api int zend_hash_exists(const hashtable *ht, constchar *arkey, uint nkeylength);zend_api int zend_hash_quick_exists(const hashtable *ht, constchar *arkey, uint nkeylength, ulong h);zend_api int zend_hash_index_exists(const hashtable *ht, ulong h);zend_api int zend_hash_move_forward_ex(hashtable *ht, hashposition *pos);zend_api int zend_hash_move_backwards_ex(hashtable *ht, hashposition *pos);zend_api int zend_hash_get_current_key_ex(const hashtable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool duplicate, hashposition *pos);zend_api int zend_hash_get_current_key_type_ex(hashtable *ht, hashposition *pos);zend_api int zend_hash_get_current_data_ex(hashtable *ht, void **pdata, hashposition *pos);zend_api int zend_hash_update_current_key_ex(hashtable *ht, int key_type, constchar *str_index, uint str_length, ulong num_index, int mode, hashposition *pos);zend_api int zend_hash_get_pointer(const hashtable *ht, hashpointer *ptr);zend_api int zend_hash_set_pointer(hashtable *ht, const hashpointer *ptr);zend_api int zend_hash_sort(hashtable *ht, sort_func_t sort_func, compare_func_t compare_func, int renumber tsrmls_dc);zend_api int zend_hash_compare(hashtable *ht1, hashtable *ht2, compare_func_t compar, zend_bool ordered tsrmls_dc);zend_api int zend_hash_minmax(const hashtable *ht, compare_func_t compar, int flag, void **pdata tsrmls_dc);zend_api int zend_hash_num_elements(const hashtable *ht);zend_api int zend_hash_rehash(hashtable *ht);
以上就介绍了php扩展开发笔记(5)一些数组操作相关的宏和简单示例,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。
   
 
   