在PHP中,引用变量在1或其他更改时都会修改。
新类由隐式引用构成,但修改扩展名不会修改父类。
这是PHP的设计,还是不同类型的“引用?”
答案 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开始,这已经发生了变化,所以今天很少有案例(如果有的话)你应该使用引用。