- PHP 菜鸟教程
- PHP - 教程
- PHP - 简介
- PHP - 安装
- PHP - 历史
- PHP - 功能
- PHP - 语法
- PHP - Hello World
- PHP - 注释
- PHP - 变量
- PHP - echo 语句和 print 语句
- PHP - var_dump() 函数
- PHP - $ 和 $$ 变量
- PHP - 常量
- PHP - 魔术常量
- PHP – 数据类型
- PHP - 类型转换
- PHP - 类型戏法
- PHP - 字符串
- PHP - 布尔值
- PHP - 整数
- PHP - 文件和I/O
- PHP – 数学函数
- PHP - Heredoc & Nowdoc
- PHP - 复合类型
- PHP - 文件包含
- PHP - 日期和时间
- PHP - 标量类型声明
- PHP - 返回类型声明
- PHP 运算符
- PHP - 运算符类型
- PHP - 算术运算符示例
- PHP - 比较运算符示例
- PHP - 逻辑运算符示例
- PHP - 赋值运算符示例
- PHP – 字符串运算符
- PHP – 数组运算符
- PHP – 条件运算符示例
- PHP - Spread 运算符
- PHP - Null 合并运算符
- PHP - Spaceship 运算符
- PHP 控制语句
- PHP – 决策
- PHP - If…Else 语句
- PHP - Switch 语句
- PHP – 循环类型
- PHP - For 循环
- PHP - Foreach 循环
- PHP - While 循环
- PHP - do...While 循环
- PHP - Break 语句
- PHP - Continue 语句
- PHP 数组
- PHP - 数组
- PHP - 索引数组
- PHP - 关联数组
- PHP - 多维数组
- PHP - 数组函数
- PHP - 常量数组
- PHP 函数
- PHP - 函数
- PHP - 函数参数
- PHP - 按值调用
- PHP - 按引用调用
- PHP - 默认参数
- PHP - 命名参数
- PHP - 变量参数
- PHP - 返回值
- PHP - 传递函数
- PHP - 递归函数
- PHP - 类型提示
- PHP - 变量范围
- PHP - 严格类型
- PHP - 匿名函数
- PHP - 箭头( Arrow )函数
- PHP - 变量处理函数
- PHP - 局部变量
- PHP - 全局变量
- PHP 超全局变量
- PHP - 超全局变量
- PHP - $GLOBALS 变量
- PHP - $_SERVER 变量
- PHP - $_REQUEST 变量
- PHP - $_POST 变量
- PHP - $_GET 变量
- PHP - $_FILES 变量
- PHP - $_ENV 变量
- PHP - $_COOKIE 变量
- PHP - $_SESSION 变量
- PHP 文件处理
- PHP - 文件处理
PHP - 按引用调用
PHP 默认使用 “按值调用” 机制将参数传递给函数。如果函数中的参数发生更改,则更改不会反映在函数外部。要允许函数修改其参数,必须使用“按引用调用”机制。
在 PHP 中,引用变量充当原始变量或主变量的 “别名”,以便它们都可以读取和写入单个值。换句话说,两个不同名称的变量可以访问相同的值,并且它们的行为就像它们是同一个变量一样。
以下 PHP 脚本将有助于理解什么是引用。这里,$var 是一个普通的字符串变量。我们将 $var 1 声明为对 $var 的引用,并在后者后附加“&”符号。
$var = "Hello";
$var1 = &$var;
当我们说 $var 1 是 $var 的别名或引用时,这意味着其值的任何更改也会更改 $var 的值,反之亦然。
例下面的示例演示了 PHP 中 “按引用调用” 是如何工作的 -
<?php
$var = "Hello";
$var1 = &$var;
$var1 = "Hello World";
echo "var=$var var1=$var1" . PHP_EOL;
$var = "How are you?";
echo "var=$var var1=$var1" . PHP_EOL;
?>
它将产生以下输出 -
var=How are you? var1=How are you?
通过引用调用 PHP 函数
要通过引用调用函数,您需要声明 name 前缀为 “&” 符号的形参。
function callref(&$arg1, &$arg2) {
Statements;
}
对函数的调用与 “按值调用” 方法相同。
callref($x, $y);
调用该函数时,$arg 1 变为对 $x 的引用,$arg 2 变为对 $y 的引用。
如果在函数体内,$arg 1 或 $arg 2(或两者)的值发生变化,它也会导致 $x 和 $y 的值发生变化。
例让我们看一下以下示例 -
<?php
function change_name(&$nm) {
echo "Initially the name is $nm" . PHP_EOL;
$nm = $nm."_new";
echo "This function changes the name to $nm" . PHP_EOL;
}
$name = "John";
echo "My name is $name" . PHP_EOL;
change_name($name);
echo "My name now is $name" . PHP_EOL;
?>
变量 $name 将传递给函数 change_name()。引用变量 &$nm 将成为其引用变量。$nm 中的任何更改都会反映在函数外部的 $name 中。
它将产生以下输出 -
Initially the name is John
This function changes the name to John_new
My name now is John_new
交换两个变量
在下面的 PHP 代码中,我们通过按值传递参数来调用函数。该函数尝试交换它们的值。
在函数内部,它们的值会发生变化,但这种交换不会反映在函数执行后的实际参数中。
当通过引用传递参数来调用同一函数时,交换效果也会反映在实际参数中。
<?php
function swap_value($a, $b) {
echo "Initial values a = $a b = $b \n";
$c = $a; $a = $b; $b = $c;
echo "Swapped values a = $a b = $b \n";
}
$x = 10; $y =20;
echo "Actual arguments x = $x y = $y \n\n";
swap_value($x, $y);
echo "Actual arguments do not change after the function: \n";
echo "x = $x y = $y \n\n";
function swap_ref(&$a, &$b) {
echo "Initial values a = $a b = $b \n";
$c = $a; $a = $b; $b = $c;
echo "Swapped values a = $a b = $b \n";
}
swap_ref($x, $y);
echo "Actual arguments get changed after the function: \n";
echo "x = $x y = $y";
?>
它将产生以下输出 -
Initial values a = 10 b = 20
Swapped values a = 20 b = 10
Actual arguments do not change after the function:
x = 10 y = 20
Initial values a = 10 b = 20
Swapped values a = 20 b = 10
Actual arguments get changed after the function:
x = 20 y = 10
按引用返回
就像 PHP 中的函数可以通过引用接受参数一样,它也可以返回引用。要定义返回引用的函数,请在函数名称前加上“&”符号。
例以下代码显示了返回引用的函数的示例。它返回 $x,这是 myfunction() 中的局部静态变量。由于前面加上了“&”符号,因此 $a(存储返回值的变量)将变为对 &x 的引用。因此,$a 的任何更改也会更改 $x 的值。
<?php
function &myfunction(){
static $x=10;
echo "x Inside function: $x \n";
return $x;
}
$a=&myfunction();
echo "Returned by Reference: $a \n";
$a=$a+10;
$a=&myfunction();
?>
它将产生以下输出 -
Returned by Reference: 10
x Inside function: 20