Why is it possible to override instance variables in PHP but not in Java?

女生的网名这么多〃 提交于 2020-01-12 05:35:50

问题


Consider the code below:

<?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

Since in other languages such as Java won't allow you to override the instance variable, but it is possible in PHP.

Is it because since PHP is weak type language so it is possible?


回答1:


No, it has nothing to do with weak typing.

I guess this was simply a design decision that the PHP developers took. It may be because it is more of a scripting language than Java. (In Java, you would need to have a "virtual" lookup table for fields to support this or, alternatively, automatically generated getters / setters).




回答2:


You made the instance variable protected, this means extending classes can overwrite it. If you want to prevent that use private.

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



来源:https://stackoverflow.com/questions/4009632/why-is-it-possible-to-override-instance-variables-in-php-but-not-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!