php中案值传递和安引用传递,PHP里的值传递与引用传递
PHP中存在着值传递和引用传递。后者需要使用地址符&来标识变量。使用赋值操作举例说明如下:
1、值传递
1)基本数据类型:
$a = 1;
$b = $a;
$b += 2;
echo "\$a =".$a."
";
echo "\$b =".$b."
";
/* 输出:
$a = 1
$b = 3
*/
?>
注:这里使用了$b = $a语句,是将$a的值赋给了$b。 即此时赋的值是1。
执行语句$b += 2后:
所以,$b变成了3,但是$a的值并没有改变。
2)引用数据类型
Person类如下:
class Person {
private $_name;
public function setName($name) {
$this->_name = $name;
}
public function getName() {
return $this->_name;
}
public function toString() {
return "name is".$this->_name;
}
}
?>
初始化两个Person类对象,并设置属性:
3
$p2 = new Person();
4
$p2->setName(“person2”);
执行以下操作:
1
$p3 = $p1;
测试:
1
echo “\$p1’s “.$p1->toString().”.
”;
2
echo “\$p3’s “.$p3->toString().”.
”;
3
4
/* 输出:
5
$p1’s name is person1.
6
$p3’s name is person1.
7
*/
注: 对于 $p3 = $p1语句, 即此时赋的值是0x000a。 即$p1和$p3都引用了同一个对象。
2、引用传递
1)基本数据类型
01
02
$a = 1;
03
$b = &$a;
04
$b += 2;
05
06
echo “\$a = “.$a.”
”;
07
echo “\$b = “.$b.”
”;
08
09
/* 输出:
10
$a = 3
11
$b = 3
12
*/
13
?>
注:这里使用$b = &$a语句,进行了引用传递: 即此时赋的值是0x0001。
所以对$b += 2后,
所以$a和$b的值都是3。
2)引用数据类型
若执行的是以下操作来替代之前的$p3 = $p1
1
$p3 = &$p1;
再执行以下操作:
1
$p3 = $p2;
测试结果如下:
1
echo “\$p1’s “.$p1->toString().”.
”;
2
echo “\$p3’s “.$p3->toString().”.
”;
3
4
/* 输出:
5
$p1’s name is person2.
6
$p3’s name is person2.
7
*/
注:对已打印出$p3的结果信息是很明了的,因为执行了$p3 = $p2语句,但是为什么打印$p1的结果信息与之前相比不一样了呢?
是因为$p3 = &$p1语句执行后, 即此时赋的值是0x0001。
紧接着执行$p3 = $p2语句后
所以才会打印出如上的结果信息,这便是地址符&在起作用。
完整代码如下:
1)引用数据类型
01
02
class Person {
03
private $_name;
04
05
public function setName($name) {
06
$this->_name = $name;
07
}
08
09
public function getName() {
10
return $this->_name;
11
}
12
13
public function toString() {
14
return “name is “.$this->_name;
15
}
16
}
17
18
$p1 = new Person();
19
$p1->setName(“person1”);
20
$p2 = new Person();
21
$p2->setName(“person2”);
22
23
$p3 = $p1;
24
// $p3 = &$p1;
25
// $p3 = $p2;
26
echo “\$p1’s “.$p1->toString().”.
”;
27
echo “\$p3’s “.$p3->toString().”.
”;
28
?>
2)基本数据类型
1
2
$a = 1;
3
$b = $a;
4
// $b = &$a;
5
$b += 2;
6
7
echo “\$a = “.$a.”
”;
8
echo “\$b = “.$b.”
”;
9
?>
结束语:对于值传递与引用传递在方法/函数参数的传递上情况下,与赋值操作情况是类似的。
最后编辑:2012-09-13作者:sunny5156
喜欢技术....
php中案值传递和安引用传递,PHP里的值传递与引用传递相关推荐
- 记录jsp页面获取table中c:forEach循环下的td里的值
<table><thead><tr><th>序号</th><th>评分项</th><th>评价项说明&l ...
- java中的强软弱虚_详解Java的四种引用——强软弱虚,颠覆你的认知!
强软弱虚 java中的数据被类型分为了两类,它们分别是基本类型和引用类型.一般我们new出来的对象都属于引用类型的范畴.我们知道java是有垃圾回收机制的一种语言,根据垃圾回收时的策略,java将对于 ...
- php function 返回值_PHP函数引用返回的实例详解
引用返回 手册里是这么写的:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时.不要用返回引用来增加性能,引擎足够聪明来自己进行优化.仅在有合理的技术原因时才返回引用!要返回引用 当你想将函数 ...
- VB.NET 对于类型的传递按值或者按引用
VB.NET 对于类型的传递按值或者按引用,(byval byref) C# 多了个out. 有时候面试的时候我会问个小问题,嘿嘿,看看对C#基本的语法有没有熟悉. 比如 public void XX ...
- js中函数参数arguments、callee、caller,值传递、重载
全栈工程师开发手册 (作者:栾鹏) js系列教程4-函数.函数参数教程全解 函数参数 arguments javascript中的函数定义并未指定函数形参的类型,函数调用也未对传入的实参值做任何类型检 ...
- 【C++引用超详细笔记, 引用、指针和值传递的汇编级辨析,对象、继承和引用】
文章目录 引用变量 1. 什么是引用.如何创建一个引用变量? 2. 引用的具体使用方法 2.1 引用做函数的形参 2.2 引用参数的const用法 左值.右值是什么? 2.3 结构体的引用 2.4 引 ...
- [Eigen中文文档] 按值将Eigen对象传递给函数
文档总目录 本文目录 按值传递和按引用传递 Eigen的处理 英文原文(Passing Eigen objects by value to functions) 按值传递和按引用传递 按值传递:传入函 ...
- Java中的Listener监听器与Ajax技术和Axios异步框架以及JSON传递接收数据
Listener监听器与Ajax Listener 概念 Listener 表示监听器,是 JavaWeb 三大组件(Servlet.Filter.Listener)之一. 监听器可以监听就是在 ap ...
- Java中的形参和实参的区别以及传值调用和传引用调用
名词解析: 1.形参:用来接收调用该方法时传递的参数.只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间.因此仅仅在方法内有效. 2.实参:传递给被调用方法的值,预先创建并赋予确定值. 3 ...
- jsp页面,使用Struts2标签,传递和获取Action类里的参数,注意事项。s:a actions:iterators:paramognl表达式...
在编写SSH2项目的时候,除了使用<s:form>表单标签向Action类跳转并传递参数之外,很更多时候还需要用到<s:a action="XXX.action" ...
最新文章
- 刘锋 吕乃基:互联网中心化与去中心化之争
- 来自Riot 的一份游戏美术教程(四):环境美术
- 南京二本有什么计算机学校,南京有什么好的二本学校?
- Linux怎么取消ftp的匿名访问功能
- C 语言实例 - 斐波那契数列
- springboot项目中mybatis实现数据的基本查询
- python编程新手常犯的错误_Python新手常犯的10个错误 - 里维斯社
- 解决办法:syslinux:Accessing physical drive
- JS 打印 data数据_用D3.js 十分钟实现字符跳动效果
- 利用ES4封装Windows10
- Fedora 13 咪咕播放器
- swiper——自动轮播
- 2019念念不忘,2020必有回响!!!
- Python OpenCV3 计算机视觉秘籍:1~5
- maven下载jar包时lastUpdated问题
- vue渐进式框架的理解
- 来电显示软件测试自学,用MSComm控件实现来电显示
- java工程师的自我评价_Java开发工程师-自我评价怎么写(范文)
- “SISTERS姐妹”双个展在南京W艺术空间举办
- 计算机网络被限速,wifi被限速了怎么办,教您电脑怎么限制wifi网速