我打算向我们的实习生解释PHP中"pass by reference"和"pass by value"之间的区别,并做了这个简单的脚本:
$a=5;
$b=&$a;
$a=8;
echo $b;
// prints 8
$a=5;
$b=$a; //no &
$a=8;
echo $b;
// prints 5
Run Code Online (Sandbox Code Playgroud)
但是,使用php -qa在php-cli中运行它会产生:
php > $a=5;
php > $b=&$a;
php > $a=8;
php > echo $b;
8
php > // prints 8
php > $a=5;
php > $b=$a; //no &
php > $a=8;
php > echo $b;
8
php > // prints 5
Run Code Online (Sandbox Code Playgroud)
不应该$b=$a;取消联系$ a和$ b?
...所以我得到了curius,并尝试:
php > $b=3;
php > echo $a;
3
Run Code Online (Sandbox Code Playgroud)
那么,我怎么弄错了?这里发生了什么?似乎参考设置以某种方式粘贴,即使它应该在线清除$b=$a?我也尝试过:
php > $e=5; $f=$e; $e=6; echo $f;
5
Run Code Online (Sandbox Code Playgroud)
......哪个按预期工作.
$a并且$b似乎永久地链接?我在这里错过了一些重点吗?如何"取消链接" $a和$b变量?
如果为变量赋值,为什么要清除引用?它的工作原理如下(带有半简化注释):
$a = 5; // creates a "slot", puts 5 in it, makes $a point to it
$b =& $a; // makes $b point to the same "slot" $a points to
$c = 6; // creates a "slot", puts 6 in it, makes $c point to it
$a = $c; // puts the value of the slot $c points to into the slot $a points to
echo $b; // outputs the value of the slot $b points to (6)
Run Code Online (Sandbox Code Playgroud)
它分配一个值的变量.值是literal(5)还是另一个变量持有的值无关紧要.引用一直持续到你unset($b).
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |