为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 扩展中引用传参

PHP 扩展中引用传参

PHP
互换的青春 2019-03-10 08:49:19
c代码: PHPAPI zval *php_array_set(zval *arr, char *p1, size_t len, const zval *val) { zval *tmpVal; tmpVal = zend_hash_str_find(Z_ARRVAL_P(arr), p1, len); if (tmpVal != NULL) { ZVAL_DEREF(tmpVal); ZVAL_COPY(tmpVal, val); } return arr; } PHP_FUNCTION(array_set) /* {{{ */ { zval *arr, *val; char *key; size_t len; ZEND_PARSE_PARAMETERS_START(3, 3) Z_PARAM_ARRAY_EX(arr, 0, 1); Z_PARAM_STRING(key, len); Z_PARAM_ZVAL(val); ZEND_PARSE_PARAMETERS_END(); php_array_set(arr, key, len, val); ZVAL_COPY(return_value, arr); } php代码: $arr1 = [ 'a' => 1111 ]; $arr2 = array_set($arr1, 'a', 2222); var_dump($arr1, $arr2); array_set接收一个引用参数,修改键值对应的值。使用gdb调试时,在调用完php_array_set方法后打印arr参数,成功修改了 但是结果$arr2修改成功,但是$arr1还是原来的值。请问这是什么原因?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 415 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信