php refcount,php的函数的形参refcount为何要加2
前几天看到一个题,原题是
$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相关推荐
- 【C 语言】文件操作 ( 配置文件读写 | 读取配置文件 | 函数接口形参 | 读取配置文件的逐行遍历操作 | 读取一行文本 | 查找字符 | 删除字符串前后空格 )
文章目录 一.函数接口形参 二.读取配置文件的逐行遍历操作 1.读取配置文件的逐行遍历操作 2.读取一行数据 3.查找字符 4.删除字符串前后的空格 5.完整代码示例 一.函数接口形参 函数作用 : ...
- 函数默认形参与占位参数
一.默认参数 1.默认参数的基本概念 默认参数就是我们可以给函数的形参设定一个初始值. 我们调用函数的时候,如果我们传了实参,那么就用我们传的实参,如果我们没有传实参的话,就用函数形参的初始值. in ...
- 【C++】函数的形参
[fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 这些天又在复习C++,温故知新,每次看书都会发现一些之前被自己忽视掉的知识点,所以,学 ...
- c/c++教程 - 2.3 函数的提高 函数的形参列表默认值 占位参数 函数重载
3. 函数的提高 目录 3. 函数的提高 3.1 函数的默认参数 3.2 函数占位参数 3.3 函数重载 (重要) 相关教程 3.1 函数的默认参数 C++中,函数的形参列表中的形参是可以有默认值的. ...
- 函数指针和指针函数:超详解——函数指针形参
函数指针: 函数指针 的本质是一个指针,该指针的地址指向了一个函数,所以它是指向函数的指针. int (*test)() 指向的是函数而非对象.和其它指针一样,函数指针指向某种特定类型.函数的类型由它 ...
- 函数的形参(普通形参、指针形参、引用形参)
以一些代码段为例: 1.普通形参 int n=10; add1(n);void add1(int v1) { v1+=1;//对实参无影响 } 这是最普通的形参方式,形参仅仅为实参的一个副本,对形参的 ...
- python中形参和return语句_Python-return语句-函数的形参定义
return语句 语法: return [表达式] [ ]可以省略 作用: 用于函数中,结束当前函数的执行,返回到调用该函数的地方,同时返回一个对象的引用关系 说明: 1.return语句后跟的表达式 ...
- 运行一个函数,其中的变量自动加一(python)
运行一个函数,其中的变量自动加一(python) 找了以下网上的写法: 使用文件的方法:https://blog.csdn.net/Jordan_Lierge/article/details/1049 ...
- 函数的实参 函数的形参 闭包 js
函数的实参和形参 可选形参 if(a === undefined) a = []; 等价于 a = a || []; 这两句是完全等价的,只不过后者需要提前声明a而已 如果参数没有传入,其余的填充un ...
最新文章
- tail | grep引起的内存升高【对比三天数据】
- 百度Google搜索框中,你不知道的变化
- 数据结构——树的理解路线(总)
- Eclipse环境下面的配置(转载)
- 高并发大流量专题---3、前端优化(减少HTTP请求次数)
- 关于 Vue.js:那些好的,不怎么样的和糟糕的
- 微信小程序-day1
- 夜曲编程Python入门课程Pro
- 省钱兄同城跑腿小程序源码uniapp前端模版源码(小程序+APP+H5)
- 给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)
- 2022-01-15:中心对称数 III。 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。 写一个函数来计算范围在 [low, high] 之间中心对称数的个
- 真正的 AI 内行盛会!
- 【图解算法】排序算法——快速排序
- 2020年移动发展趋势
- 甲骨文开始审核 Java 许可问题:500 强企业“连夜”卸载 Oracle JDK
- AI/大数据测试——各大厂质量保障实践分享汇总
- 了解Synchronzied原理一篇就够了!
- python实现税后工资_合理避税--月薪与年终奖优化配置(Python数据分析初级练手小项目)...
- 75道程序员面试逻辑测试题(附答案)(2)
- (NBUT - 1457)Sona(莫队+离散化)
热门文章
- Laravel Facades的实现原理
- java面试 数据库连接池_阿里面试官:数据库连接池有必要吗?你对它的底层实现了解过没?...
- IDEA 在头注解上添加用户名称和时间
- 关于Etcd的几个问题
- solr-4.10.3.tgz.tgz下载
- 例行性工作 排程(crontab)
- solr集群搭建,zookeeper集群管理
- openssl 创建 CA 详细操作手册
- Hadoop之MapReduce分布式计算
- [开心学php100天]第五天:string函数(上)