在PHP中对变量进行别名

时间:2014-06-04 17:35:45

标签: php class object alias

我有一个库类class someClass{....}。我为这个类创建了一个对象。

$objectA = someClass;

我想将$objectA的别名用于$objectB之类的内容,因此我的课程更有意义。

PS:$objectB应指向$objectA

2 个答案:

答案 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}}

在概念上相似,只是在实现和语言模型方面有所不同

引用=别名=指针