我有一個班,其中$name
設置爲'bob'。在兒童班,我把$name
設置爲'Karen',但它不起作用。爲什麼你不能在子類中用常量覆蓋父變量? (PHP)
在我的回聲陳述中,第一個表示「bob」而不是「Karen」。第二個,使用子類方法,雖然工作。
這是爲什麼?
class First {
public $name;
public function __construct() {
$this->name = 'bob';
}
}
class Third extends First {
public $name = 'Karen';
public function set_name ($name) {
$this->name = $name;
}
}
$instance_of_third = new Third;
$third_name = $instance_of_third->name;
echo "<br />We're looking for Karen: $third_name<br />";
// $third_name here is 'bob' from parent class
$instance_of_third->set_name("Karen");
$third_name = $instance_of_third->name;
// $third_name here is 'Karen' only after using set_name()
echo "<br />We're looking for Karen: $third_name<br />";
編輯:我添加了2行顯示輸出是什麼。
即使$name
在子類中明確設置爲'Karen',它將顯示爲'bob',除非使用set_name()
函數來更改它。
奇怪的是我期望如果有人想擴展一個類並改變其中一個屬性,他們可以像我一樣明確地完成它,而不必編寫一堆構造函數代碼。 – 2012-02-13 08:42:38
@ButtleButkus看到我的更新。你可以做到這一點。你只需要明白初始化一個新實例的順序是:'new Foo' - >用默認屬性創建'Foo'的新實例 - >然後在該實例上自動調用'__construct'來做額外的初始化。 – Gordon 2012-02-13 08:53:11