PHP里的值传递与引用传递_PHP教程
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。
执行语句$b += 2后:
所以,$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都引用了同一个对象。
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
?>
结束语:对于值传递与引用传递在方法/函数参数的传递上情况下,与赋值操作情况是类似的。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

Log masuk CakePHP adalah tugas yang sangat mudah. Anda hanya perlu menggunakan satu fungsi. Anda boleh log ralat, pengecualian, aktiviti pengguna, tindakan yang diambil oleh pengguna, untuk sebarang proses latar belakang seperti cronjob. Mengelog data dalam CakePHP adalah mudah. Fungsi log() disediakan

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Bab ini membincangkan maklumat tentang proses pengesahan yang terdapat dalam CakePHP.
