- 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 - 展开运算符
- PHP - 空值合并运算符
- PHP - 比较运算符
- 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 - $GLOBALS
- PHP - $_SERVER
- PHP - $_REQUEST
- PHP - $_POST
- PHP - $_GET
- PHP - $_FILES
- PHP - $_ENV
- PHP - $_COOKIE
- PHP - $_SESSION
- PHP 文件处理
- PHP - 文件处理
- PHP - 打开文件
- PHP - 读取文件
- PHP - 写入文件
- PHP - 文件是否存在
- PHP - 下载文件
- PHP - 复制文件
- PHP - 追加文件
- PHP - 删除文件
- PHP - 处理 CSV 文件
- PHP - 文件权限
- PHP - 创建目录
- PHP - 列出文件
- 面向对象 PHP
- PHP - 面向对象编程
- PHP - 类和对象
- PHP - 构造函数和析构函数
- PHP - 访问修饰符
- PHP - 继承
- PHP - 类常量
- PHP - 抽象类
- PHP - 接口
- PHP - 特性
- PHP - 静态方法
- PHP - 静态属性
- PHP - 命名空间
- PHP - 对象迭代
- PHP - 封装
- PHP - Final 关键字
- PHP - 重载
- PHP - 克隆对象
- PHP - 匿名类
- PHP Web 开发
- PHP - Web 概念
- PHP - 表单处理
- PHP - 表单验证
- PHP - 表单邮件/URL
- PHP - 完整表单
- PHP - 文件包含
- PHP - GET 和 POST
- PHP - 文件上传
- PHP - Cookie
- PHP - Session
- PHP - Session 选项
- PHP - 发送邮件
- PHP - 净化输入
- PHP - Post-Redirect-Get (PRG)
- PHP - 闪存消息
- PHP 高级
- PHP - MySQL
- PHP.INI 文件配置
- PHP - 数组解构
- PHP - 编码规范
- PHP - 正则表达式
- PHP - 错误处理
- PHP - Try…Catch
- PHP - Bug 调试
- PHP - 针对 C 开发人员
- PHP - 针对 PERL 开发人员
- PHP - 框架
- PHP - Core PHP 与框架
- PHP - 设计模式
- PHP - 过滤器
- PHP - JSON
- PHP - 异常
- PHP - 特殊类型
- PHP - 哈希
- PHP - 加密
- PHP - is_null() 函数
- PHP - 系统调用
- PHP - HTTP 认证
- PHP - 交换变量
- PHP - Closure::call()
- PHP - 过滤后的 unserialize()
- PHP - IntlChar
- PHP - CSPRNG
- PHP - 期望
- PHP - Use 语句
- PHP - 整数除法
- PHP - 已弃用的功能
- PHP - 已移除的扩展和 SAPI
- PHP - PEAR
- PHP - CSRF
- PHP - FastCGI 进程
- PHP - PDO 扩展
- PHP - 内置函数
- PHP 有用资源
- PHP - 速查表
- PHP - 问答
- PHP - 快速指南
- PHP - 在线编译器
- PHP - 有用资源
- PHP - 讨论
PHP - 按引用传递
默认情况下,PHP 使用“按值传递”机制将参数传递给函数。如果函数内部的参数发生更改,则更改不会反映在函数外部。要允许函数修改其参数,必须使用“按引用传递”机制。
在 PHP 中,引用变量充当原始变量或宿主变量的“别名”,以便两者都可以读取和写入单个值。换句话说,两个不同名称的变量可以访问相同的值,并且它们的行为就像它们是同一个变量。
以下 PHP 脚本将有助于理解什么是引用。这里,$var 是一个普通的字符串变量。我们将 $var1 声明为 $var 的引用,在后者后面追加“&”符号。
$var = "Hello"; $var1 = &$var;
当我们说 $var1 是 $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=Hello World var1=Hello World var=How are you? var1=How are you?
按引用调用 PHP 函数
要按引用调用函数,需要将形式参数的名称前缀为“&”符号。
function callref(&$arg1, &$arg2) { Statements; }
对函数的调用与“按值传递”方法相同。
callref($x, $y);
当调用函数时,$arg1 成为 $x 的引用,$arg2 成为 $y 的引用。
如果在函数体内部,$arg1 或 $arg2(或两者)的值发生更改,则也会导致 $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 中。
它将产生以下输出 -
My name is John 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"; ?>
它将产生以下输出 -
Actual arguments x = 10 y = 20 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(); ?>
它将产生以下输出 -
x Inside function: 10 Returned by Reference: 10 x Inside function: 20