【发布时间】:2013-10-30 10:54:18
【问题描述】:
我在 php.net 手册中发现以下几行,我无法理解他们到底想说什么。
"从 PHP 5 开始,对象变量不包含对象本身,因为 值了。它只包含一个对象标识符,它允许 对象访问器来查找实际对象。当一个对象被发送时 参数,返回或分配给另一个变量,不同的 变量不是别名:它们持有标识符的副本,其中 指向同一个对象。 "
我不明白什么是差异。在 php5 中的引用和标识符之间。他们给出了下面的例子。
class A {
public $foo = 1;
}
$a = new A;
$b = $a; // $a and $b are copies of the same identifier
// ($a) = ($b) = <id>
$b->foo = 2;
echo $a->foo."\n";
$c = new A;
$d = &$c; // $c and $d are references
// ($c,$d) = <id>
$d->foo = 2;
echo $c->foo."\n";
$e = new A;
function foo($obj) {
// ($obj) = ($e) = <id>
$obj->foo = 2;
}
foo($e);
echo $e->foo."\n";
//Outputs 2 2 2
当我们应该使用 ref 时,它会给出相同的输出。我们应该复制没有引用的对象吗?
如果有人能解释一下 ref 的确切含义,我将不胜感激。和标识符。
谢谢,吉米特
【问题讨论】:
-
引用与
array、integer和其他非类的php 类型一起显式使用,因为它们在函数调用中使用时会被复制。 -
afaik 对象标识符是引用。例如,在 java 中,引用/标识符是一个 16 字符长的字母数字值。
-
我认为这些例子的意思是在 php 中通过引用传递参数是默认的。如果不是这样,那么在第一个和第三个示例中,您会看到 1 i/o 2。
-
@Ashalynd 通过引用传递和作为对象标识符的值是有区别的!