php refcount,php的函数的形参refcount为何要加2

 2023-09-17 阅读 22 评论 0

摘要:前几天看到一个题,原题是$b = 1;//refcount=1a($b);//refcount=2function a($a){debug_zval_dump($a);//refcount=4 why not 3??(传的是变量$a,按值传递会加1)php range函数?xdebug_debug_zval('a');//refcount=3 why not 2??(传的是字符

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

$b = 1;//refcount=1

a($b);//refcount=2

function a($a){

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

php range函数?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";

php获取参数。$b = foo($a);

0818b9ca8b590ca3270a3433284dd417.png

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

function foo($var)

{

$vars = func_get_args();

echo $vars[0]; // foobaz

PHP函数?echo $var; // foobaz

$var = "bar";

$vars = func_get_args();

echo $vars[0]; // foobaz

echo $var; // bar

}

strlen函数、$a = "foobaz";

foo($a);

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/72113.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息