首页 > 试题广场 >

以下程序的结果是什么?

[单选题]
$a="hello";
$b= &$a;
unset($b);
$b="world";
echo $a;
的结果是什么?( )
  • hello
  • world
  • NULL
  • unset
A 多个变量指向同一个地址时,修改会同时改变多个变量的值,但删除其中一个变量 别的不受影响 
发表于 2016-09-01 14:53:00 回复(0)
http://blog.sina.com.cn/s/blog_84251c8f0101brbi.html 这里讲的比较清楚
发表于 2015-04-19 14:42:06 回复(1)
这是一个变量和引用的问题,$a,$b存储的是变量地址,$a=1,$b=&$a;其实是把变量a的地址给$b,当销毁$b时,其实只是消掉了一个地址,但是$a仍然只想1
发表于 2018-11-03 14:46:25 回复(0)
lop头像 lop
通过 xdebug_debu g_zval来分析会更好 的理解:
$a="hello";
        xdebug_debug_zval('a'):
        (refcount=1, is_ref=0),string 'hello' (length=5)
$b= &$a;
        xdebug_debug_zval('a'):
    (refcount=2, is_ref=1),string 'hello' (length=5)
unset($b);
        xdebug_debug_zval('a'):
    (refcount=1, is_ref=0),string 'hello' (length=5)

可以很清晰的看到,unset($b ),仅仅是将$a的refcount减1,is_ref变为0了
并没有对$a有实质的影响, 因此$a的结果依然是"hello"

发表于 2015-04-10 18:52:19 回复(1)
unset($b)只是去掉$b对这个字符串的引用数而已,实际上$a还在引用这个字符串,所以字符串未被回收,$a值不变
发表于 2015-05-13 15:51:01 回复(0)
可以把“变量”看成一个容器,“变量名”相当于这个容器的标签!

unset相当于把这个标签名给撕了,但是只要这个盒子还有标签名贴着,那就不会被PHP的垃圾回收机制给回收掉!所以除非把所有标签给撕了,或者直接把容器里面的东西给拿出来,那么就成了空==>NULL了
发表于 2015-12-09 13:33:23 回复(7)
refcount减一
发表于 2022-05-15 22:09:11 回复(1)
写时复制
发表于 2021-09-08 16:42:51 回复(0)
&传引用两个变量指向同一个内存空间,unset销毁的是b的联系,真正的资源并没有释放
发表于 2020-04-13 18:11:56 回复(0)
unset函数相当于删除了变量b对值的引用
发表于 2018-03-16 08:17:47 回复(0)
相当于$b是$a的别名,它们指向同一个内存地址。改变其中一个值,等于另外一个值也会改变。
发表于 2017-09-19 18:32:48 回复(0)
相对了,选错了
发表于 2017-09-04 08:44:37 回复(0)
这一题考的是unset,unset是将内存与变量名之间的联系断开,内存里的内容还是“hello”
只要这块内存中的引用计数不为0,就不会被释放
编辑于 2017-08-28 09:40:51 回复(0)
看错了,看成echo $b;了
发表于 2017-06-10 16:10:09 回复(0)
&$a 引用$a所指向的地址
发表于 2017-05-03 21:35:56 回复(0)
unset($b) 删除和$a的关系,$a的值不变
发表于 2017-03-02 11:33:23 回复(0)
xdebug_zval 可以看得更清楚
发表于 2016-08-13 15:44:18 回复(0)
变量有个机制 假如有多个变量指向同一个地址 取消其中一个变量   其他变量不受影
发表于 2016-01-28 21:35:40 回复(1)
unset() 函数是php自带的一个销毁变量的函数;
发表于 2015-10-19 22:17:44 回复(0)
多个变量指向同一个地址时:1.其中一个被取消,另外的不受影响;2.其中一个改变赋值,另外的相应改变。
发表于 2015-08-26 10:00:11 回复(0)