There are value passing and reference passing in PHP. The latter requires the use of the address character & to identify the variable. Examples of using assignment operations are as follows:
1. Value transfer
1) Basic data types:
01
02
$a = 1;
03
$b = $a;
04
$b += 2;
05
06
echo "$a = ".$a."
";
07
echo "$b = ".$b."
";
08
09
/* Output:
10
$a = 1
11
$b = 3
12
*/
13
?>
Note: The statement $b = $a is used here to assign the value of $a to $b. That is, the value assigned at this time is 1.
After executing statement $b += 2:
So, $b becomes 3, but the value of $a does not change.
2) Reference data type
Person class is as follows:
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
}
Initialize two Person class objects and set properties:
1
$p1 = new Person();
2
$p1->setName("person1");
3
$p2 = new Person();
4
$p2->setName("person2");
Do the following:
1
$p3 = $p1;
Test:
1
echo "$p1's ".$p1->toString().".
";
2
echo "$p3's ".$p3->toString().".
";
3
4
/* Output:
5
$p1's name is person1.
6
$p3's name is person1.
7
*/
Note: For the statement $p3 = $p1, the value assigned at this time is 0x000a. That is, both $p1 and $p3 refer to the same object.
2. Pass by reference
1) Basic data types
01
02
$a = 1;
03
$b = &$a;
04
$b += 2;
05
06
echo "$a = ".$a."
";
07
echo "$b = ".$b."
";
08
09
/* Output:
10
$a = 3
11
$b = 3
12
*/
13
?>
Note: The statement $b = &$a is used here to pass by reference: That is, the value assigned at this time is 0x0001.
So after $b += 2,
So the values of $a and $b are both 3.
2) Reference data type
If the following operation is performed to replace the previous $p3 = $p1
1
$p3 = &$p1;
Then do the following:
1
$p3 = $p2;
The test results are as follows:
1
echo "$p1's ".$p1->toString().".
";
2
echo "$p3's ".$p3->toString().".
";
3
4
/* Output:
5
$p1's name is person2.
6
$p3's name is person2.
7
*/
Note: It is very clear that the result information of $p3 has been printed, because the $p3 = $p2 statement has been executed, but why is the result information of $p1 printed different from before?
is because after the $p3 = &$p1 statement is executed, the value assigned at this time is 0x0001.
Immediately after executing the $p3 = $p2 statement
That's why the above result information is printed. This is the address character & at work.
The complete code is as follows:
1) Reference data type
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) Basic data types
1
www.bkjia.com