php 函数传值_传址_函数参数,php函数的传值与传址(引用)详解
在php中我们函数传值就比较简单了,但可能有些朋友地天真无邪函数传址或引用搞不明白,下面小编来给各位介绍在php中函数传值与传址(引用)介绍,希望对各位有所帮助。
php中引用的用法:
1. 变量的引用赋值: $a = &$b
2. 函数调用时的引用参数传递
1) 早期php是在调用时通过&符号传递引用类型的变量, 比如: func(&$arg);
2) 后来, 函数的引用类型参数被规定为需要在函数声明时定义, 不如: function func(&$arg);
注: 引用声明时定义引用类型参数后, 运行时引用参数传递被废弃, 需要在php.ini中增加allow_call_time_pass_reference来开启.
3. 函数返回引用类型, 这种应用方式需要声明函数时, 在函数名前增加&符号, 并且, 在调用时, 要用引用赋值方式, 比如:
代码如下
复制代码
function &func() {
return $a;
}
$a = func(); //这种调用方式得到的不是引用传值
$a =& func(); //这样调用才是引用传值
简而言之, 就是让函数的返回一个引用类型的值, 一个更实际的例子:
代码如下
复制代码
$a = 1;
function &func(&$a) {
return $a;
}
$b = func($a);
$c =& func($a);
$b = 2;
echo "a: $a, b: $b, c: $c.
/n";
//输出a: 1, b: 2, c: 1.
//可见对$b的修改不会影响$a
$c = 3;
echo "a: $a, b: $b, c: $c.
/n";
//输出a: 3, b: 2, c: 3.
//可见对$c的修改会影响$a
php函数传值的几个细节
代码如下
复制代码
//一、基本数据类型的传值
/* **************************************************** */
function testvar($k){
$k = 40;
}
$c = 30;
//给一个函数参数传一个基本数据类型(整型,布尔,字符 ...), 实际上传的就是值 ;
testvar($c);
echo $c;//结果是:30
function testvar2(&$k){
$k = 40;
}
$e = 30;
//给一个函数参数传一个基本数据类型(整型,布尔,字符 ...), 实际上传的y就是地址 ;
testvar2($e);
echo $e;//结果是:40
/* **************************************************** */
//二、数组(默认情况下是复制一份数据),如要传地址则&$arr.
$arr1 = array(-1,5,0);
function testArr($arr){
for($i=0;$i
for($j=$i+1;$j
if($arr[$i]>$arr[$j]){
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}
}
}
print_r($arr); //结果:Array ( [0] => -1 [1] => 0 [2] => 5 )
}
testArr($arr1);
print_r($arr1); //结果:Array ( [0] => -1 [1] => 5 [2] => 0 )
function testArr2(&$arr){
for($i=0;$i
for($j=$i+1;$j
if($arr[$i]>$arr[$j]){
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}
}
}
}
testArr($arr1);
print_r($arr1); //结果:Array ( [0] => -1 [1] => 0 [2] => 5 )
/* **************************************************** */
//三、对象数据类型传值
class person{
public $name;
public $age;
}
$a = new person();
$a->name = '小明';
$a->age = '20';
//变量a在存的是对象的地址,把a赋给b这个变量,实际上就是赋了一个地址。
$b = $a;
$b->age = 30;
//echo $a->age.$b->age;//结果是:30 30
//给一个函数参数传一个对象, 实际上传的是这个对象的地址;
function test($k){
$k->age =40;
}
//调用
test($b);
//echo $a->age.$b->age;//结果是:40 40
php函数的传值与传址有什么区别呢?对于这样的问题我喜欢通过程序演示来获取答案。让我们来看一个演示记录吧!
代码如下
复制代码
程序输出:
1)函数传值前变量$i的值:100
2)传值后函数的返回值:200
3)函数传值后变量$i的值:100
4)函数传址前变量$i的值:100
5)传址后函数的返回值:200
6)函数传址后变量$i的值:200
解释:
1)直接输出一个赋值$i=100的变量
2)func函数传值返回一个算术相加的结果$=100+100
3)func函数传值,其作用区域只限于函数内部,对外面的变量$i不会有影响
4)同上
5)func函数参数前多了个"&"符,表示传址,和2)一样,返回值是函数的算术运行结果。
6)func(&$i),变量指针指向$i的位置,可以理解为是对变量$i的操作,$i=$i+100;这时变量$i已经相当于重新被赋值
如果去掉上面代码的第18行注释,会得什么结果呢?
小结:传址为了在执行函数的同时,同时改变函数参数值,而传值不期望改变。
php 函数传值_传址_函数参数,php函数的传值与传址(引用)详解相关推荐
- php 函数传值_传址_函数参数,php函数的传值与传址(引用)详解_PHP教程
在php中我们函数传值就比较简单了,但可能有些朋友地天真无邪函数传址或引用搞不明白,下面小编来给各位介绍在php中函数传值与传址(引用)介绍,希望对各位有所帮助. php中引用的用法: 1. 变量的引 ...
- php header函数的详解,php header函数的详解_PHP教程
header函数在php中是发前一些头部信息的,如果我们可以直接使用它来做301跳转等,下面我来总结关于header函数用法与一些常用见问题解决方法. 发送一个原始 HTTP 标头[Http Head ...
- uploaded php,PHP uploaded_files函数使用技巧详解_PHP教程
对 在早期的PHP版本中,上传文件很可能是通过如下的代码实现的:-- if (isset($_FILES['file'])) { $tmp_name= $_FILES['file']['tmp_nam ...
- php中errorreporting,php中error_reporting函数用法详解_PHP教程
在php中error_reporting是设置 PHP 的报错级别并返回当前级别,我们可以根据不同级别来设置是不给出错误提示域外出错时是否向往执行程序,下面我来介绍error_reporting()用 ...
- c语言不定长参数函数,DEFUN 如何定义支持不定长参数的函数
当前位置:我的异常网» C语言 » DEFUN 如何定义支持不定长参数的函数 DEFUN 如何定义支持不定长参数的函数 www.myexceptions.net 网友分享于:2015-07-15 ...
- python计算各类型电影的评分_【Python数据科学实战项目】之 基于MovieLens的影评趋势分析|详解...
原标题:[Python数据科学实战项目]之 基于MovieLens的影评趋势分析|详解 注:图片源于https://movielens.org/ 1. 项目任务 1.1 数据来源 本项目使用Group ...
- 百家号 python高手养成_【一点资讯】Python使用PyQt5进行图形界面GUI编程之详解QWidget类的坐标体系 www.yidianzixun.com...
Python使用PyQt5进行图形界面GUI编程之详解QWidget类的坐标体系 上篇内容,我们详细介绍了使用PyCharm中LiveTemplate功能快速输入一个GUI应用框架的办法.(参见学会这 ...
- php时间格式函数,PHP函数之日期时间函数date()使用详解_php基础_脚本
$t=time(); echo date("Y-m-d H:i:s",$t); 第一个参数的格式分别表示: a - "am" 或是 "pm" ...
- Unity编辑器AssetDatabase函数API用法中文详解-Chinar教程
Chinar blog :www.chinar.xin AssetDatabase 函数用法汇总 本文提供全流程,中文翻译 助力快速理解 AssetDatabase API 用法 为初学者节省宝贵的时 ...
最新文章
- 数据的统计特征量有哪些
- 直播回顾 | 最强中文NLP预训练模型艾尼ERNIE官方揭秘
- 全景视频的跟踪与合成方法
- Windows 8各个版本的功能详解与对比【中文详表】
- 云调用,小程序鉴权正确姿势
- 返回变量内容的错误示例和正确返回的4种方法
- mongodb添加多条数据_Python 数据库骚操作 -- MongoDB
- [CQOI2017] 老C的任务(差分 + 树状数组 / K-D tree)
- linux(ubuntu)下分区和格式化sd卡
- Centos7安装Python3的方法
- [原]浅谈几种服务器端模型——反应堆模式(epoll 简介) - _Boz - 博客园
- 总结的一些android公共库
- 优先部署EDI系统把握信息传输的主动权
- InTouch 如何备份驱动的通信配置
- qpython3怎么运行代码_关于使用qpython和qpython3写程序
- 基于STM32的物联网语音控制智能家居
- 从《致加西亚的信》看项目管理
- 马尔可夫链的定义、举例和应用
- Linux怎样关闭防火墙?
- English trip V1 - 11.What's That? 那是什么?Teacher:Patrick Key:There's/There are
热门文章
- Python入门100题 | 第054题
- Python编程基础:第二十五节 args参数*args
- 十行Python代码搞定图片中的物体检测
- 【机器学习算法-python实现】Adaboost的实现(1)-单层决策树(decision stump)
- 关于代码运行时间Stopwatch的使用
- Flask部署和分发
- Hudson-ci/Installing Hudson Windows Service---官方文档
- 盘点区块链的2018:技术与工具演进篇
- 从腾讯朋友圈揭秘内部AI部门竞争关系,谁能像微信当年一样熬出头? By 微胖2017年11月10日 09:06 撰文 | 宇多田 在腾讯合作伙伴大会上,腾讯首席运营官任宇昕提出的「AI in All」
- 帮Facebook把用户做到7亿的那个人,告诉你如何实现用户增长