2010-10-24 35 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

相关问题