日期:2014-05-17  浏览次数:20560 次

$a=new A 和 $a= & new A 到底有没有区别?
$a=new A; // $a 是 new A 的 指针 的一个拷贝 ( $a 保存的是 指针本身)


$a=& new A; // $a 是 new A 的 指针 的一个 引用 ( $a 保存的是 指针的地址)


以上说法正确吗?


另外:

$c= & $a 的时候, 为什么会把 $a 也变成了 A 的指针的 引用 ?



------解决方案--------------------
$c= & $a 的时候, 为什么会把 $a 也变成了 A 的指针的 引用 ?

是沿袭于 $a=& new A; ?

------解决方案--------------------
嘻嘻,&在C里面是取址符
------解决方案--------------------
php里的变量都是指针,但对于string,int等,赋值=是对象的拷贝,对于对象,赋值=是地址的拷贝(也就是引用),我现在感觉这么理解挺好的。
------解决方案--------------------
无论是 php 的什么版本 new 算符产生的都是引用
$a =& new A;
这种写法是不准确的。把一个对象的引用的引用赋给变量?
所以在 php5.3 就新增了一个错误类型,来规范书写的格式
Deprecated: Assigning the return value of new by reference is deprecated 

php5.2及以前不报错,但并不等于就不是错。
就如同你屏蔽了 E_NOTICE 级别错误,但不能说就没有错,毕竟还是使用了 未经定义的变量或下标了嘛



------解决方案--------------------
很纠结的问题
------解决方案--------------------
正统的用法
$c = new A;

就当其它的用法都是扯淡了。
------解决方案--------------------
唉,还是看牛人的博客吧
http://www.laruence.com/2008/09/19/520.html
解释了你6楼的问题

------解决方案--------------------
查了一下手册:

关于引用:
在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,替代的是,引用是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身——变量名是目录条目,而变量内容则是文件本身。引用可以被看作是 Unix 文件系统中的 hardlink。 

关于new:
Construct an instance of "type" and store the reference to the object into "result".
所以$c = new A;是赋值引用而不是做对象拷贝。 $c = &new A; 是错误的写法。

自 PHP 5 起,new 自动返回引用,因此在此使用 =& 已经过时了并且会产生 E_STRICT 级别的消息。
------解决方案--------------------
关于赋值:

注意赋值运算将原变量的值拷贝到新变量中(传值赋值),所以改变其中一个并不影响另一个。这也适合于在很密集的循环中拷贝一些值例如大数组。也可以使用引用赋值,用 $var = &$othervar; 语法。引用赋值意味着两个变量都指向同一个数据,没有任何数据的拷贝。有关引用的更多信息见引用的说明。在 PHP 5中,对象总是通过引用赋值的,除非明确使用新的 clone关键字。 


PHP code

<?php

$a = 1;
$b = &$a;
$c = $a;

$b = 2;
echo "a:$a, b:$b, c:$c\n"; 

$d = $b;
$d = 3;
echo "a:$a, b:$b, c:$c\n"; 

class A {
    public $foo = 1;
}

$oa = new A;
$ob = $oa;

$oa->foo = 2;
echo "oa:$oa->foo, ob:$ob->foo\n"; 
?>

------解决方案--------------------
$a =1;
$b = & $a; 
不同的变量指向同一个地址,当其中一个($b=2)改变,那么另一个也会改变($a=2).但是把$b 销毁掉(unset($b))后 $a = 2还是存在的。

$a =1;
$b = $a;//他就是$b=1
=> $a =1;$b=1;
$b $a 没有一毛钱的关系 ,你是你我是我,谁也管不着谁。

$a=& new A; 这种东西我还真不用的,没啥意思。