Почему возможно переопределить переменные экземпляра в 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 является слабым типом языка, так что это возможно?

Solutions Collecting From Web of "Почему возможно переопределить переменные экземпляра в PHP, но не в Java?"

Нет, это не имеет никакого отношения к слабому набору текста .

Думаю, это было просто дизайнерское решение, которое взяли разработчики PHP. Это может быть потому, что это скорее язык сценариев, чем Java. (В Java вам нужно будет иметь «виртуальную» таблицу поиска для полей для поддержки этого или, альтернативно, автоматически созданных геттеров / сеттеров).

Вы сделали защиту экземпляра защищенной, это означает, что расширение классов может перезаписать ее. Если вы хотите запретить использование частного доступа.

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