繁体   English   中英

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

[英]Why is it possible to override instance variables in PHP but not in 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是弱类型语言所以它可能吗?

不,它与弱打字无关。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM