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里的值传递与引用传递相关推荐

  1. 记录jsp页面获取table中c:forEach循环下的td里的值

    <table><thead><tr><th>序号</th><th>评分项</th><th>评价项说明&l ...

  2. java中的强软弱虚_详解Java的四种引用——强软弱虚,颠覆你的认知!

    强软弱虚 java中的数据被类型分为了两类,它们分别是基本类型和引用类型.一般我们new出来的对象都属于引用类型的范畴.我们知道java是有垃圾回收机制的一种语言,根据垃圾回收时的策略,java将对于 ...

  3. php function 返回值_PHP函数引用返回的实例详解

    引用返回 手册里是这么写的:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时.不要用返回引用来增加性能,引擎足够聪明来自己进行优化.仅在有合理的技术原因时才返回引用!要返回引用 当你想将函数 ...

  4. VB.NET 对于类型的传递按值或者按引用

    VB.NET 对于类型的传递按值或者按引用,(byval byref) C# 多了个out. 有时候面试的时候我会问个小问题,嘿嘿,看看对C#基本的语法有没有熟悉. 比如 public void XX ...

  5. js中函数参数arguments、callee、caller,值传递、重载

    全栈工程师开发手册 (作者:栾鹏) js系列教程4-函数.函数参数教程全解 函数参数 arguments javascript中的函数定义并未指定函数形参的类型,函数调用也未对传入的实参值做任何类型检 ...

  6. 【C++引用超详细笔记, 引用、指针和值传递的汇编级辨析,对象、继承和引用】

    文章目录 引用变量 1. 什么是引用.如何创建一个引用变量? 2. 引用的具体使用方法 2.1 引用做函数的形参 2.2 引用参数的const用法 左值.右值是什么? 2.3 结构体的引用 2.4 引 ...

  7. [Eigen中文文档] 按值将Eigen对象传递给函数

    文档总目录 本文目录 按值传递和按引用传递 Eigen的处理 英文原文(Passing Eigen objects by value to functions) 按值传递和按引用传递 按值传递:传入函 ...

  8. Java中的Listener监听器与Ajax技术和Axios异步框架以及JSON传递接收数据

    Listener监听器与Ajax Listener 概念 Listener 表示监听器,是 JavaWeb 三大组件(Servlet.Filter.Listener)之一. 监听器可以监听就是在 ap ...

  9. Java中的形参和实参的区别以及传值调用和传引用调用

    名词解析: 1.形参:用来接收调用该方法时传递的参数.只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间.因此仅仅在方法内有效. 2.实参:传递给被调用方法的值,预先创建并赋予确定值. 3 ...

  10. jsp页面,使用Struts2标签,传递和获取Action类里的参数,注意事项。s:a actions:iterators:paramognl表达式...

    在编写SSH2项目的时候,除了使用<s:form>表单标签向Action类跳转并传递参数之外,很更多时候还需要用到<s:a action="XXX.action" ...

最新文章

  1. 刘锋 吕乃基:互联网中心化与去中心化之争
  2. 来自Riot 的一份游戏美术教程(四):环境美术
  3. 南京二本有什么计算机学校,南京有什么好的二本学校?
  4. Linux怎么取消ftp的匿名访问功能
  5. C 语言实例 - 斐波那契数列
  6. springboot项目中mybatis实现数据的基本查询
  7. python编程新手常犯的错误_Python新手常犯的10个错误 - 里维斯社
  8. 解决办法:syslinux:Accessing physical drive
  9. JS 打印 data数据_用D3.js 十分钟实现字符跳动效果
  10. 利用ES4封装Windows10
  11. Fedora 13 咪咕播放器
  12. swiper——自动轮播
  13. 2019念念不忘,2020必有回响!!!
  14. Python OpenCV3 计算机视觉秘籍:1~5
  15. maven下载jar包时lastUpdated问题
  16. vue渐进式框架的理解
  17. 来电显示软件测试自学,用MSComm控件实现来电显示
  18. java工程师的自我评价_Java开发工程师-自我评价怎么写(范文)
  19. “SISTERS姐妹”双个展在南京W艺术空间举办
  20. 计算机网络被限速,wifi被限速了怎么办,教您电脑怎么限制wifi网速

热门文章

  1. Redhat 设置cntlm代理步骤
  2. HTML5 文档定义Doctype
  3. Scala:未受重视却潜力巨大的Android编程语言
  4. VirtualBox 安装ghost版windows XP
  5. 计算机科学专业必读的44册经典著作
  6. 《暖冬里的事儿 ——春假散札》
  7. elk-Logstash
  8. C语言-排序-希尔排序
  9. Perl 数字与字符串运算符之区别
  10. javascript下的数值型比较真的没有那么简单