热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php值传递是什么,PHP里的值传递与引用传递

PHP中存在着值传递和引用传递。后者需要使用地址符&来标识变量。使用赋值操作举例说明如下:1、值传递1)基本数据类型:$a1;$b$a;$b2;echo

PHP中存在着值传递和引用传递。后者需要使用地址符&来标识变量。使用赋值操作举例说明如下:

1、值传递

1)基本数据类型:

$a = 1;

$b = $a;

$b += 2;

echo "\$a =".$a."
";

echo "\$b =".$b."
";

/* 输出:

$a = 1

$b = 3

*/

?>

注:这里使用了$b = $a语句,是将$a的值赋给了$b。 即此时赋的值是1。

a70e91820b65cce66b29a87b4c2bcaf1.png

执行语句$b += 2后:

e6d5c7048212dad5900a56b2bda128da.png

所以,$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都引用了同一个对象。

18aabe50df97a5a287307064156eee2a.png

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。

52727430c439871c35bffe07eb64663e.png

所以对$b += 2后,

dcb0f8eb90942353e6ac05da1337afd0.png

所以$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。

2a65702965a8c13cdfc861d72e589785.png

紧接着执行$p3 = $p2语句后

dc77c6839cf4928fec64c98745b9f932.png

所以才会打印出如上的结果信息,这便是地址符&在起作用。

完整代码如下:

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

0241ce914f3ca1e001b07a6287273dc5?s=96&d=retro&r=g

喜欢技术....



推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文讨论了一个关于正则的困惑,即为什么一个函数会获取parent下所有的节点。同时提出了问题是否是正则表达式写错了。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
author-avatar
轻点指尖划过秋天的一抹痕8023意
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有