6

考虑下面的代码:

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

4

2 回答 2

12

不,它与弱类型无关。

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

于 2010-10-24T18:23:45.407 回答
-1

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

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

于 2010-10-24T18:19:12.453 回答