當我嘗試重寫類變量的方式與重寫PHP中的類方法的方式相同。如:PHP變量覆蓋
class DataMapper {
protected $_name = null;
public function printName() {
echo $this->_name;
}
}
class Model extends DataMapper {
protected $_name = 'Ana';
}
$test = new Model();
$test->printName();
這是打印'安娜'。
爲什麼PHP可以做這樣的事情呢?它打破了面向對象範式的規律
我不認爲語言行爲在任何司法管轄區都是非法的。變量實際上不需要被映射。而在PHP中,對象也是非常簡單的字典。你只在這裏重新聲明默認值。 – mario 2011-06-14 04:56:36
那些不是類變量(即'static'),它們是對象/實例變量。正如人們所解釋的,這就是繼承應該如何與受保護的成員一起工作。如果你想設置一個私有類變量(即'private static $ myVar ='Ana';'),那麼它就不會在任何子類中定義。 – joelhardi 2011-06-14 05:11:04
我理解它的方式,你是對的。您通常不能覆蓋變量。在這裏,你並沒有真的這麼做,你只是簡單地重新宣佈一個變量,而原來的東西卻丟失了。反正我覺得呢。 我認爲PHP的標準只是稍微寬鬆一些,並且可以讓您擺脫可疑的語法/操作。 – Jonathon 2013-04-17 01:59:20