VARIABLES和CLASSES中的PHP引用行为(由引用形成) - 它们是不同的还是相同的?

时间:2009-10-04 21:31:22

标签: php reference

在PHP中,引用变量在1或其他更改时都会修改。

新类由隐式引用构成,但修改扩展名不会修改父类。

这是PHP的设计,还是不同类型的“引用?”

2 个答案:

答案 0 :(得分:1)

您对引用的子类化(扩展)感到困惑。

这是扩展,这就是你所描述的:

class ParentClass{ };
class ChildClass extends ParentClass { };

$parent = new ParentClass;
$child = new ChildClass;

$parent->setName('Dad');
$child->setName('Daughter');

echo $parent->name;
// Dad

事实上,这是你想要描述的吗?

通过引用传递变量/类是一个完全不同的对话,并没有真正与子类化/扩展类的想法相关联。它的工作原理更像是这样。

$parent = new ParentClass;
$child = new ChildClass;

$childRef = $child; // $childRef isn't a copy, it's a reference to $child.
$childRef->setName('Daughter');

echo $child->name;
// Daughter
// Notice that it's the same as if you had called setName( ) on $child itself;

答案 1 :(得分:0)

PHP中的引用是一个奇怪的构造。 $a =& $b;使$a成为对$b的引用。这意味着只要$b的值发生变化,$a就会反映出这种变化。换句话说,$a将始终与$b具有相同的值。

在PHP 4中,在分配对象时将隐式克隆对象。例如。如果$b是对象,代码$a = $b将创建一个新对象,该对象是$b的副本,并将其分配给$a。这是一个问题,因为您通常需要对象的引用语义。为了解决这个问题,你必须在处理对象时使用引用。从PHP 5开始,这已经发生了变化,所以今天很少有案例(如果有的话)你应该使用引用。