一个有意思的问题,原生php [ 未指定版本 ]
<?php
namespace app\controllers;
use yii\base\Controller;
class test{
public $prop1 = 3;
}
class Test3Controller extends Controller{
public function actionIndex(){
$a = new test();
$b = $a;
$a->prop1 = 2;
echo $b->prop1;
}
}
这里的$b->prop1的值?OK,是2没错,说明对象赋值是引用,继续~
<?php
namespace app\controllers;
use yii\base\Controller;
class test{
public $prop1 = 3;
}
class Test3Controller extends Controller{
public function actionIndex(){
$a = new test();
$b = $a;
$a = null;
echo $b->prop1;
}
}
这个就有点意思了,刚刚不是说对象赋值是引用么,这里就开始打脸了,卧了个槽,$b->prop1居然还存在,输出的值是3,那好,再做个试验
<?php
namespace app\controllers;
use yii\base\Controller;
class test{
public $prop1 = 3;
}
class Test3Controller extends Controller{
public function actionIndex(){
$a = new test();
$b = $a;
$a = null;
var_dump($a);
echo '<br />';
var_dump($b);
}
}
结果是这样的,直接上图:
$a确实被null掉了,但$b是一个对象了?!?(⊙o⊙)嗯
原因是这样:new出test对象的时候,$a被赋值的只是对象的引用地址,而$a赋值给$b的时候也只是把引用地址给了$b而已,然后$a被null掉了,但$b的引用地址还存在,当然也就还能利用引用地址找到这个对象;归根结底$a和$b就是用的同一个对象,对于php的对象,只要还有一个引用存在于该对象上,那么这个对象就不会被回收,也就是还可以调用,不信,你var_dump出$a和$b的对象,对象编号肯定是一样的。
共 0 个回答
没有找到数据。
易语晓乐 四川成都
注册时间:2017-01-18
最后登录:2017-05-14
在线时长:2264小时1分
最后登录:2017-05-14
在线时长:2264小时1分
- 粉丝19
- 金钱1675
- 威望0
- 积分24315