前几天看到一个题,原题是

$b = 1;//refcount=1

a($b);//refcount=2

function a($a){

debug_zval_dump($a);//refcount=4 why not 3??(传的是变量$a,按值传递会加1)

xdebug_debug_zval('a');//refcount=3 why not 2??(传的是字符'a')

}

我们知道在PHP中获取参数其实有2种方式:

1、通过func_get_args获取参数列表

2、通过指定形参,然后通过操作形参获取

通过下面的例子可以很直观的看到为什么是要加2次

function foo($var)

{

$var = "bar";

return $var;

}

$a = "foobaz";

$b = foo($a);

从图片上很直观的看出来,函数传参时,首先会复制一份以便func_get_args获取,如果有形参时,会再次给形参复制一份,这也解释了为什么改变形参,而用func_get_args 获取的参数没有发生改变,例如:

function foo($var)

{

$vars = func_get_args();

echo $vars[0]; // foobaz

echo $var; // foobaz

$var = "bar";

$vars = func_get_args();

echo $vars[0]; // foobaz

echo $var; // bar

}

$a = "foobaz";

foo($a);

php refcount,php的函数的形参refcount为何要加2相关推荐

  1. 【C 语言】文件操作 ( 配置文件读写 | 读取配置文件 | 函数接口形参 | 读取配置文件的逐行遍历操作 | 读取一行文本 | 查找字符 | 删除字符串前后空格 )

    文章目录 一.函数接口形参 二.读取配置文件的逐行遍历操作 1.读取配置文件的逐行遍历操作 2.读取一行数据 3.查找字符 4.删除字符串前后的空格 5.完整代码示例 一.函数接口形参 函数作用 : ...

  2. 函数默认形参与占位参数

    一.默认参数 1.默认参数的基本概念 默认参数就是我们可以给函数的形参设定一个初始值. 我们调用函数的时候,如果我们传了实参,那么就用我们传的实参,如果我们没有传实参的话,就用函数形参的初始值. in ...

  3. 【C++】函数的形参

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 这些天又在复习C++,温故知新,每次看书都会发现一些之前被自己忽视掉的知识点,所以,学 ...

  4. c/c++教程 - 2.3 函数的提高 函数的形参列表默认值 占位参数 函数重载

    3. 函数的提高 目录 3. 函数的提高 3.1 函数的默认参数 3.2 函数占位参数 3.3 函数重载 (重要) 相关教程 3.1 函数的默认参数 C++中,函数的形参列表中的形参是可以有默认值的. ...

  5. 函数指针和指针函数:超详解——函数指针形参

    函数指针: 函数指针 的本质是一个指针,该指针的地址指向了一个函数,所以它是指向函数的指针. int (*test)() 指向的是函数而非对象.和其它指针一样,函数指针指向某种特定类型.函数的类型由它 ...

  6. 函数的形参(普通形参、指针形参、引用形参)

    以一些代码段为例: 1.普通形参 int n=10; add1(n);void add1(int v1) { v1+=1;//对实参无影响 } 这是最普通的形参方式,形参仅仅为实参的一个副本,对形参的 ...

  7. python中形参和return语句_Python-return语句-函数的形参定义

    return语句 语法: return [表达式] [ ]可以省略 作用: 用于函数中,结束当前函数的执行,返回到调用该函数的地方,同时返回一个对象的引用关系 说明: 1.return语句后跟的表达式 ...

  8. 运行一个函数,其中的变量自动加一(python)

    运行一个函数,其中的变量自动加一(python) 找了以下网上的写法: 使用文件的方法:https://blog.csdn.net/Jordan_Lierge/article/details/1049 ...

  9. 函数的实参 函数的形参 闭包 js

    函数的实参和形参 可选形参 if(a === undefined) a = []; 等价于 a = a || []; 这两句是完全等价的,只不过后者需要提前声明a而已 如果参数没有传入,其余的填充un ...

最新文章

  1. tail | grep引起的内存升高【对比三天数据】
  2. 百度Google搜索框中,你不知道的变化
  3. 数据结构——树的理解路线(总)
  4. Eclipse环境下面的配置(转载)
  5. 高并发大流量专题---3、前端优化(减少HTTP请求次数)
  6. 关于 Vue.js:那些好的,不怎么样的和糟糕的
  7. 微信小程序-day1
  8. 夜曲编程Python入门课程Pro
  9. 省钱兄同城跑腿小程序源码uniapp前端模版源码(小程序+APP+H5)
  10. 给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)
  11. 2022-01-15:中心对称数 III。 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。 写一个函数来计算范围在 [low, high] 之间中心对称数的个
  12. 真正的 AI 内行盛会!
  13. 【图解算法】排序算法——快速排序
  14. 2020年移动发展趋势
  15. 甲骨文开始审核 Java 许可问题:500 强企业“连夜”卸载 Oracle JDK
  16. AI/大数据测试——各大厂质量保障实践分享汇总
  17. 了解Synchronzied原理一篇就够了!
  18. python实现税后工资_合理避税--月薪与年终奖优化配置(Python数据分析初级练手小项目)...
  19. 75道程序员面试逻辑测试题(附答案)(2)
  20. (NBUT - 1457)Sona(莫队+离散化)

热门文章

  1. Laravel Facades的实现原理
  2. java面试 数据库连接池_阿里面试官:数据库连接池有必要吗?你对它的底层实现了解过没?...
  3. IDEA 在头注解上添加用户名称和时间
  4. 关于Etcd的几个问题
  5. solr-4.10.3.tgz.tgz下载
  6. 例行性工作 排程(crontab)
  7. solr集群搭建,zookeeper集群管理
  8. openssl 创建 CA 详细操作手册
  9. Hadoop之MapReduce分布式计算
  10. [开心学php100天]第五天:string函数(上)