php 对象元素的引用,php5 中, 对象引用的注意问题

php5|对象|问题

在php4年代, 对象的引用是通过一个简单的 "&" 符号来实现的.

在php5中($obj1 = $obj2;)默认就是引用的方式, 不需要刻意的加一个 "&" 符号,但是在php5中仍然还保留了php4种

的这用引用方式.

但是这两种方式到底有什么区别呢,下面让我们来看看分析一下.

老的引用方式实现方式如下(下面的一段代码可以在php4和php5上跑):

代码1:

这样变量 $t1 和 $t2 就指向了同一个对象, 他们共享内存中的同一个对象.

代码2:

t1变量被unset后,t1变成了null, 但是t2仍然还是指向原来的对象.

代码3:

t1=null后,t1变成了null, 可是t2竟然也变成了null

天啊,t1和t2的结果怎么会不一样呢? 折腾了半天才想明白, 通过"&" 引用的方式,实际上不应该叫做"引用",应该叫做"传址", 传址的概念在c语言里面是很明确的, 并且代码的书写方式是很类似的. 最开始,还以为这个和java里面对象引用的处理方式一样呢, 笨.....................啊!.

下面再来看看 php5 中的引用的方式吧.

代码4:

class test1{

public function aa(){

echo "aaaaaaaaaaa

";

}

public function __destruct(){

echo "game over!";

}

}

$t1 = new test1();

$t2 = $t1;

$t1 = null;

echo $t2->aa();

unset($t2);

?>

代码5:

class test1{

public function aa(){

echo "aaaaaaaaaaa

";

}

public function __destruct(){

echo "game over!";

}

}

$t1 = new test1();

$t2 = $t1;

unset($t1);

echo $t2->aa();

unset($t2);

?>

发现没有,代码4和代码5 的运行结果完全相同, 这个结果到是令人满意, 和java的对象引用的实现方式终于一致了.

--------------------------------------------------

结论, 结果证明php4的"&"这种方式是"传址", 而php5的默认的方式是"引用"(唠叨批).

在 php5 中引用对象的时候要根据实际的情况选择适当的引用的方式. 如果程序比较大,引用同一个对象的变量比较多,并且希望用完该对象后手工清除它,个人建议用 "&" 方式,然后用$var=null的方式清除. 其它时候还是用php5的默认方式吧. 另外, php5中对于大数组的传递,建议用 "&" 方式, 毕竟节省内存空间使用吗.

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值