在PHP中别名变量

问题描述 投票:0回答:2

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

$objectA = someClass;

我想为$objectA使用别名,例如$objectB,因此我的课更有意义。

PS:$objectB应指向$objectA

php class object alias
2个回答
5
投票
$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

0
投票

我喜欢约翰·孔德的回答。我想添加以下内容(使其更简单):

在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),那么您就明白了。 :)

https://www.php.net/manual/en/language.references.php上的更多内容>

概念相似,仅在实现和语言模型方面有所不同:

引用=别名=指针

© www.soinside.com 2019 - 2024. All rights reserved.