$a=new A; // $a 是 new A 的 指针 的一个拷贝 ( $a 保存的是 指针本身)
$a=& new A; // $a 是 new A 的 指针 的一个 引用 ( $a 保存的是 指针的地址)
以上说法正确吗?
另外:$c= & $a 的时候, 为什么会把 $a 也变成了 A 的指针的 引用 ?
$a=& new A; // $a 是 new A 的 指针 的一个 引用 ( $a 保存的是 指针的地址)
以上说法正确吗?
另外:$c= & $a 的时候, 为什么会把 $a 也变成了 A 的指针的 引用 ?
可是,$c=new A;
$d=&$c; 这只是对$d的操作啊,怎么 $c 也会变成了 对 new A 的引用的?
$a =& new A;
这种写法是不准确的。把一个对象的引用的引用赋给变量?
所以在 php5.3 就新增了一个错误类型,来规范书写的格式
Deprecated: Assigning the return value of new by reference is deprecated php5.2及以前不报错,但并不等于就不是错。
就如同你屏蔽了 E_NOTICE 级别错误,但不能说就没有错,毕竟还是使用了 未经定义的变量或下标了嘛
看PHP手册:http://www.php.net/manual/zh/language.oop5.references.php $a = new A;
$b = $a; // $a ,$b都是同一个标识符的拷贝
// ($a) = ($b) = <id>
$b->foo = 2;
echo $a->foo."\n";
$c = new A;
$d = &$c; // $c ,$d是引用
// ($c,$d) = <id>这里又说 $a,$b 都是同一个标识符的拷贝又说 $c ,$d是引用, 以上两种说法不是自相矛盾吗?难到因为是 $c 所以就是引用, 因为是$a 就是标识符的拷贝? 还跟变量的名字有关系?
$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 级别的消息。
$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:2, b:2, c:1
a:2, b:2, c:1
oa:2, ob:2
$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; 这种东西我还真不用的,没啥意思。