我有一个库类class someClass{....}
。我为这个类创建了一个对象。
$objectA = someClass;
我想将$objectA
的别名用于$objectB
之类的内容,因此我的课程更有意义。
PS:$objectB
应指向$objectA
答案 0 :(得分:3)
$objectB = $objectA;
来自the manual:
经常提到的PHP 5 OOP的一个关键点是 “默认情况下,对象通过引用传递”。这不完全 真正。本节使用一些例子来纠正这种普遍的想法。
PHP引用是一个别名,它允许两个不同的变量 写入相同的值。从PHP 5开始,对象变量没有 将对象本身包含为值。它只包含一个对象 标识符,允许对象访问者查找实际对象。 当一个对象通过参数发送,返回或分配给另一个对象时 变量,不同的变量不是别名:它们持有副本 标识符,指向同一个对象。
<?php
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";
?>
以上示例将输出:
2
2
2
答案 1 :(得分:1)
我喜欢约翰·康德的回答。我想添加以下内容(使其更简单):
在PHP中,几乎所有东西都可以被“引用”。对于像我这样的老年人来说,它与“指针”类似,它们来自C和ASM的技术编程。
“指针”是内存中某物的物理位置的地址。通过了解它,您可以引用该内容,而无需在上下文中使用该变量。
在PHP中,如果在对象,结构或变量之前加上符号“&”,则是在告诉解释器您要引用内容而不是内容本身。当将它与另一个对象,结构或变量相关联时,PHP解释器会将其引用到与原始对象相同的内存位置,而不是在另一个内存分配点中创建它的副本。通常,您将得到两个指向RAM中相同位置的项目。
您可以像这样在PHP中引用变量,结构和对象:
<php>
$variable = "Variable Content";
$alias = &$variable;
echo $alias;
</php>
上面的代码应打印Variable Content
。如果更改$ variable的内容,则在使用时,它们都将寻找相同的物理位置来检索内容,这也会影响$ alias(反之亦然)。
但是,如果您取消设置两个变量($ variable或$ alias),则不会取消设置引用,这意味着另一个将继续工作。考虑一下这类似于Unix unlink调用。相同的规则适用于对象,结构和变量。
是的,您可以为同一内容提供多个引用。
如果您现在突然想到“垃圾收集”(GC),那么您就明白了。 :)
更多{@ {3}}
在概念上相似,只是在实现和语言模型方面有所不同
引用=别名=指针