2017-02-09 15:12:29 2149次浏览 0条回答 0 悬赏 10 金钱
<?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);
	}
}

结果是这样的,直接上图:
QQ截图20170209150910.png

$a确实被null掉了,但$b是一个对象了?!?(⊙o⊙)嗯

原因是这样:new出test对象的时候,$a被赋值的只是对象的引用地址,而$a赋值给$b的时候也只是把引用地址给了$b而已,然后$a被null掉了,但$b的引用地址还存在,当然也就还能利用引用地址找到这个对象;归根结底$a和$b就是用的同一个对象,对于php的对象,只要还有一个引用存在于该对象上,那么这个对象就不会被回收,也就是还可以调用,不信,你var_dump出$a和$b的对象,对象编号肯定是一样的。

    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
易语晓乐
副董事长

易语晓乐 四川成都

注册时间:2017-01-18
最后登录:2017-05-14
在线时长:2264小时1分
  • 粉丝19
  • 金钱1675
  • 威望0
  • 积分24315

热门问题