2010-10-24 63 views
6

考慮下面的代碼:爲什麼可以在PHP中重寫實例變量而不是在Java中?

<?php 

class Base { 
     protected $name = "Base"; 

     public function getName() { 
      return $this->name; 
     } 
} 

class Foo extends Base { 
     protected $name = "Foo"; 
} 

$f = new Foo(); 
echo $f->getName(); // output: Foo 

$b = new Base(); 
echo $b->getName(); // output: Base 

因爲在其他語言如Java不會讓你覆蓋實例變量,但有可能在PHP。

是因爲PHP是弱類型語言所以可能嗎?

回答

12

不,它無關weak typing

我想這只是PHP開發人員所做的設計決定。這可能是因爲它比Java更像是一種腳本語言。 (在Java中,您需要有一個「虛擬」查找表,用於支持該字段的字段或者自動生成的getters/setters)。

+1

我沒票了,所以我不能碰到你的答案,但這是唯一一個遠程接近回答爲什麼在PHP中,超級伊娃被覆蓋的問題,而在Java et al,超級伊娃被陰影/隱藏(並且它們不完全相同)。 – BoltClock 2010-10-24 18:25:31

相關問題