为什么可以在PHP中覆盖实例变量而不是在Java中?

考虑以下代码:

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是弱类型语言所以有可能吗?

不,它与弱打字无关。

我想这只是PHP开发人员采用的设计决策。 这可能是因为它更像是一种脚本语言而不是Java。 (在Java中,您需要为字段提供“虚拟”查找表以支持此function,或者自动生成的getter / setter)。

您使实例变量受到保护,这意味着扩展类可以覆盖它。 如果你想防止私人使用。

http://www.php.net/manual/en/language.oop5.visibility.php