Posted in PHP onApril 01, 2021
引用传递:将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。被调函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址
注:在函数调用时没有引用符号——只有函数定义中有。
主要是实参和形参的相互影响性。引用传递:形参的改变会影响实参 , 值传递:赋值,不相互影响 。 按照按值传递的做法来传值时,如果需要原来的值发生改变,则需要在进行代码复制,若是值够大或者是一大串字符串时,会使代码比较多,重复,而引用传递则不需要复制PHP代码,对提高性能这一个方面有很大的优势。
function adduce(&$string) // 引入变量,使用同一个存储地址
{
$string .= '我是引用传递.';
echo $string;// 输出 '我是外部字符串, 我是引用传递.'
}
$str = '我是外部字符串, ';
adduce($str);
echo $str; // 输出 '我是外部字符串, 我是引用传递.'
$str
输出:- 我是外部字符串, 我是引用传递.
$string
输出:- 我是外部字符串, 我是引用传递.
以上示例证明 $str
更改了地址。新地址与 $string
共用同一值
如果没有这个&
符号,请看示例
function adduce2($string)
{
$string .= '内部字符串.';
echo $string;// 输出 '我是外部字符串, 我是引用传递.'
}
$str = '外部字符串, ';
adduce2($str);
echo $str; // 输出 '外部字符串, '
$str
输出:- 外部字符串,
$string
输出:- 我是外部字符串, 我是引用传递.
以上示例证明 $str
内容不变。与 $string
互不影响
函数的引用传递
//示例1
$a = 1;
function &func(&$a) {
return $a;
}
$b = func($a); // 这里不是函数引用传递
$b = 2;
echo "a: $a, b: $b, c: $c. <br />";//输出a: 1, b: 2, c: 1. 可见对$b的修改不会影响$a
-----------------------------------------------------------------------------------------------------------------------------------
//示例2
$a = 1;
function &adduce(&$a) {
return $a;
}
$c = &adduce($a); // 这是函数引用传递,$c和$a引用同一个值
$c = 3;
echo "a: $a, b: $b, c: $c. <br />";//输出a: 3, b: 2, c: 3. 可见对$c的修改会影响$a
php引用传递
- Author -
June.1声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@