[PHP] 数组在PHP内核中的实现 →→→→→进入此内容的聊天室

来自 , 2020-09-05, 写在 PHP, 查看 133 次.
URL http://www.code666.cn/view/2e0aca89
  1. zval* array;
  2. array_init(array);
  3. add_assoc_string(array, "key", "value", 1);
  4.  
  5.  
  6.  
  7. zval* array;
  8. ALLOC_INIT_ZVAL(array);
  9. Z_TYPE_P(array) = IS_ARRAY;
  10.  
  11. HashTable *h;
  12. ALLOC_HASHTABLE(h);
  13. Z_ARRVAL_P(array)=h;
  14. zend_hash_init(h, 50, NULL,ZVAL_PTR_DTOR, 0);
  15.  
  16. zval* barZval;
  17. MAKE_STD_ZVAL(barZval);
  18. ZVAL_STRING(barZval, "value", 0);
  19. zend_hash_add(h, "key", 4, &barZval, sizeof(zval*), NULL);
  20.  
  21.  
  22.  
  23.  
  24. //add_assoc_*系列函数:
  25. add_assoc_null(zval *aval, char *key);
  26. add_assoc_bool(zval *aval, char *key, zend_bool bval);
  27. add_assoc_long(zval *aval, char *key, long lval);
  28. add_assoc_double(zval *aval, char *key, double dval);
  29. add_assoc_string(zval *aval, char *key, char *strval, int dup);
  30. add_assoc_stringl(zval *aval, char *key,char *strval, uint strlen, int dup);
  31. add_assoc_zval(zval *aval, char *key, zval *value);
  32.  
  33. //备注:其实这些函数都是宏,都是对add_assoc_*_ex函数的封装。
  34.  
  35. //add_index_*系列函数:
  36. ZEND_API int add_index_long             (zval *arg, ulong idx, long n);
  37. ZEND_API int add_index_null             (zval *arg, ulong idx                   );
  38. ZEND_API int add_index_bool             (zval *arg, ulong idx, int b    );
  39. ZEND_API int add_index_resource (zval *arg, ulong idx, int r    );
  40. ZEND_API int add_index_double   (zval *arg, ulong idx, double d);
  41. ZEND_API int add_index_string   (zval *arg, ulong idx, const char *str, int duplicate);
  42. ZEND_API int add_index_stringl  (zval *arg, ulong idx, const char *str, uint length, int duplicate);
  43. ZEND_API int add_index_zval             (zval *arg, ulong index, zval *value);
  44.  
  45. //add_next_index_*函数:
  46. ZEND_API int add_next_index_long                (zval *arg, long n      );
  47. ZEND_API int add_next_index_null                (zval *arg                      );
  48. ZEND_API int add_next_index_bool                (zval *arg, int b       );
  49. ZEND_API int add_next_index_resource    (zval *arg, int r       );
  50. ZEND_API int add_next_index_double              (zval *arg, double d);
  51. ZEND_API int add_next_index_string              (zval *arg, const char *str, int duplicate);
  52. ZEND_API int add_next_index_stringl             (zval *arg, const char *str, uint length, int duplicate);
  53. ZEND_API int add_next_index_zval                (zval *arg, zval *value);
  54.  
  55.  
  56.  
  57.  
  58. PHP中                          内核中
  59. $arr[] = NULL;          add_next_index_null(arr);
  60. $arr[] = 42;            add_next_index_long(arr, 42);
  61. $arr[] = true;          add_next_index_bool(arr, 1);
  62. $arr[] = 3.14;          add_next_index_double(arr, 3.14);
  63. $arr[] = 'foo';         add_next_index_string(arr, "foo");
  64. $arr[] = $var;          add_next_index_zval(arr, zval);
  65.  

回复 "数组在PHP内核中的实现"

这儿你可以回复上面这条便签

captcha