【发布时间】:2013-04-24 08:25:11
【问题描述】:
我是一名 PHP 学习者。请帮助我了解下面的 PHP OOP 代码:
class x{}
$x = new x;
$x->name = "Chandan";
class y extends x {} // Inheritance
$y = new y;
var_dump($x); // object X; Shows Name property
var_dump($y); // object y; Empty
$y = $x;
var_dump($x); // object X; name = chandan
var_dump($y); // object X; name = chandan
$x->name = "Debasis";
var_dump($x); // object X; name = debasis
var_dump($y); // object X; name = debasis
问题:
当我们说 $x->name = "Chandan";它会创建公共属性吗?在 C++ 中从未见过这样的分配。
对 $x->name 的更改也反映在 $y 对象中。为什么? $y = $x 应该创建一个 $x 的副本。
【问题讨论】:
-
1 -> 是,2 -> 不,不。
-
对 2 的补充:注意两个 var_dump 之后的 #1。这是同一个对象。也许您想使用clone。
-
X 是空类,所以 y 没有扩展任何内容。您动态地为对象赋值(类仍然为空)。你永远不会在 PHP 中看到这样的东西:D
-
我认为
1也应该会导致某种可恢复的错误。这可能会让你感兴趣:php.net/manual/pl/language.oop5.magic.php