PHP5中的对象和引用

PHP5中的对象和引用,php,php-5.3,Php,Php 5.3,我在php.net手册中找到了下面几行,我无法理解他们到底想说什么 从PHP5开始,对象变量不包含对象本身 它只包含一个允许 对象访问器来查找实际对象。当 参数,返回或分配给另一个变量,则 变量不是别名:它们包含标识符的副本,而 指向同一个对象。” 我无法理解php5中引用和标识符之间的区别。他们给出了下面的例子 class A { public $foo = 1; } $a = new A; $b = $a; // $a and $b are copies of the

我在php.net手册中找到了下面几行,我无法理解他们到底想说什么

从PHP5开始,对象变量不包含对象本身 它只包含一个允许 对象访问器来查找实际对象。当 参数,返回或分配给另一个变量,则 变量不是别名:它们包含标识符的副本,而 指向同一个对象。”

我无法理解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
A类{
公众$foo=1;
}  
$a=新a;
$b=$a;//$a和$b是相同标识符的副本
//($a)=($b)=
$b->foo=2;
echo$a->foo。“\n”;
$c=新A;
$d=&$c;//$c和$d是参考资料
//($c$d)=
$d->foo=2;
echo$c->foo。“\n”;
$e=新A;
函数foo($obj){
//($obj)=($e)=
$obj->foo=2;
}
富(e元);;
echo$e->foo。“\n”;
//产出2
当我们应该使用ref时,它会给出相同的输出。我们应该复制对象而不使用ref

若有人能向我解释参考号和标识符的确切含义,我将不胜感激

谢谢,吉米

$a = new A;
$b = $a;
$b->foo = 'bar';  // changes the object that the identifier in $a and $b both refer to

$b = new B;       // overwrites $b with a new object identifier
$b->foo = 'baz';  // changes only $b's object

$a->foo // bar
$b->foo // baz
与之相比:

$a = new A;
$b = &$a;         // BIG DIFFERENCE HERE!
$b->foo = 'bar';  // changes the object that both $a and $b refer to

$b = new B;       // overwrites both $a and $b with a new object identifier
$b->foo = 'baz';

$a->foo // baz
$b->foo // baz
变量引用(
&
)的工作方式与它们的工作方式相同,您可以使两个变量引用相同的值。改变任何一个变量都会改变这两个变量,它们或多或少地联系在一起

对象只是标识符,这意味着如果将一个对象复制到另一个变量(
$a=$b
),两个变量都拥有相同的对象标识符。但这两个变量的链接方式与使用
&
引用时不同

对象标识符实际上是标识对象的东西。它是一个类似于
整数42
的值。这个值表示“我指的是对象1”。实际对象本身存储在别处,并在需要时提取。对象标识符是一级间接寻址:

$a = 42;
$b = &$a;
这里两个变量所指的值完全相同。在符号表中,这看起来像:

symbol | value
-------+------
a, b   | 42
但对于对象标识符,它看起来是这样的:

$a = new A;
$b = $a;

symbol | value             object   | details
-------+---------          ---------+--------
a      | object#1          object#1 | class A { ... }
b      | object#1

(上表主要用于说明,实际的技术细节可能有所不同。)

引用与
数组
整数
和其他非类的php类型一起明确使用,因为它们在函数调用中使用时被复制。afaik对象标识符是引用。例如,在java中,引用/标识符是一个16个字符长的字母数字值。我认为这些示例的意思是,在php中,通过引用传递参数是默认值。如果不是这样,那么在第一个和第三个示例中,您将看到1 i/o 2。@Ashalynd通过引用传递与作为对象标识符的值之间存在差异!非常感谢您@deceze。。我完全理解。