php的函数的形参refcount为何要加2
来源:互联网 发布:b站鬼畜视频知乎 编辑:程序博客网 时间:2024/05/07 11:03
前几天看到一个题,原题是
<?php$b = 1;//refcount=1a($b);//refcount=2function 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次
<?phpfunction foo($var){ $var = "bar"; return $var;}$a = "foobaz";$b = foo($a);
图片和例子来自http://julien-pauli.developpez.com/tutoriels/php/internals/variables/?page=page_6
从图片上很直观的看出来,函数传参时,首先会复制一份以便func_get_args获取,如果有形参时,会再次给形参复制一份,这也解释了为什么改变形参,而用func_get_args 获取的参数没有发生改变,例如:
<?phpfunction 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为何要加2
- 为什么对象 属性的refcount=2
- php 给图片加水印的函数
- 实用的PHP加解密函数
- Ajax的url请求中为何要加随机数
- ::SetWindowPos()为何要加::
- PHP 5中新增加日期(date)函数的常量
- php中在函数前加static的作用
- PHP的DES加解密函数 与JAVA兼容
- php中函数前加&符号的作用
- php关于为何要默认设置register_globals = off的解释
- Java匿名类中使用的局部变量为何要加final
- php函数前面加&符号 和 变量前面加&符号的意义
- php函数前面加&符号 和 变量前面加&符号的意义
- Android里面的service方法为何没有加同步机制
- C#中函数参数的形参和实参即加ref 或加 out 与全部不加
- 编码为何要加注释
- jqurey为何要加 $(function(){});
- 兼容性问题与浏览器的内核及渲染模式
- Android多媒体开发【8】-- AwesomePlayer基本框架及播放流程
- windows下的脚本文件(*.sh)转到linux下编码格式问题
- 10分钟学会使用qmake
- 简介
- php的函数的形参refcount为何要加2
- Java 入门 八 (Java 反射)
- J2EE Servlet运行原理
- Valid Number
- Document base XXXXX does not exist or is not a readable directory.
- 0x60221631指令引用0x00000000 出现read
- android DOM解析Xml
- oracle 管道流函数
- HibernateTemplate