欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP里的值传递与引用传递_PHP教程

程序员文章站 2022-04-05 16:39:34
...
PHP中存在着值传递和引用传递。后者需要使用地址符&来标识变量。使用赋值操作举例说明如下:

1、值传递

1)基本数据类型:

01
02
$a = 1;
03
$b = $a;
04
$b += 2;
05

06
echo "\$a = ".$a."
";
07
echo "\$b = ".$b."
";
08

09
/* 输出:
10
$a = 1
11
$b = 3
12
*/
13
?>
注:这里使用了$b = $a语句,是将$a的值赋给了$b。 即此时赋的值是1。
PHP里的值传递与引用传递_PHP教程
执行语句$b += 2后:
PHP里的值传递与引用传递_PHP教程
所以,$b变成了3,但是$a的值并没有改变。

2)引用数据类型

Person类如下:

01
class Person {
02
private $_name;
03

04
public function setName($name) {
05
$this->_name = $name;
06
}
07

08
public function getName() {
09
return $this->_name;
10
}
11

12
public function toString() {
13
return "name is ".$this->_name;
14
}
15
}
初始化两个Person类对象,并设置属性:

1
$p1 = new Person();
2
$p1->setName("person1");
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都引用了同一个对象。
PHP里的值传递与引用传递_PHP教程

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。
PHP里的值传递与引用传递_PHP教程

所以对$b += 2后,

PHP里的值传递与引用传递_PHP教程

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

PHP里的值传递与引用传递_PHP教程
紧接着执行$p3 = $p2语句后

PHP里的值传递与引用传递_PHP教程
所以才会打印出如上的结果信息,这便是地址符&在起作用。

完整代码如下:

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
?>
结束语:对于值传递与引用传递在方法/函数参数的传递上情况下,与赋值操作情况是类似的。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/478049.htmlTechArticlePHP中存在着值传递和引用传递。后者需要使用地址符来标识变量。使用赋值操作举例说明如下: 1、值传递 1)基本数据类型: 01 ?php 02 $a...