Формулировка «из того же объема» означает «из же класса, в котором этот метод определен».
В этом случае test
определен в классе A. Таким образом, $this->foo()
собирается позвонить A foo
- не имеет значения, является ли $this
является A или B, поскольку private
методов: неpolymorphic.
Контрастировать это до protected
методов, которые являются полиморфными, поэтому изменение модификатора доступа изменяет поведение; и удаляет пункт «той же области действия».
Относительно того, почему это так оно и есть, рассмотреть роль модификаторов:
Члены объявляются защищенному могут быть доступны только внутри самого класса и наследственными и родительских классов. Пользователей, объявленных как private, может быть доступен только [тот же] класс, который определяет член.
Это означает, что $this->foo()
(от испытания А в) не может возможно назвать Foo B, либо он будет нарушать это ограничение.Другие языки ООП работают аналогично по той же причине: только полиморфизм работает, вызывающему пользователю разрешен доступ к этому методу.
См. Why are private methods not working with polymorphism?, который действительно является дубликатом, хотя вопрос написан с точки зрения опытного поведения.
Это «одинаковый объем» формулировка относится к тому, как будет решен метод, и делает не относятся к $this
напрямую. Лексическим объемом $this
, специальной переменной, будет текущий метод экземпляра; и значение $this
- это значение экземпляра, на который был вызван метод.
http://stackoverflow.com/questions/20908078/private-prefix-for-methods-not-working-with-polymorphism-in-php – user2864740
Текущий класс: self: not $ this – ThomasP1988
@ Muhammet - so что такое «текущий класс/объект»? A или B? – Mulligan1981