Почему можно переопределить переменные экземпляра в PHP, а не в Java? - PullRequest
6 голосов
/ 24 октября 2010

Рассмотрим приведенный ниже код:

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

Ответы [ 2 ]

13 голосов
/ 24 октября 2010

Нет, это не имеет ничего общего с слабым набором .

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

0 голосов
/ 24 октября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...