Страницы

Поиск по вопросам

четверг, 8 ноября 2018 г.

Области видимости

В каких случаях следует применять области видимости? public static protected private


Ответ

Области видимости помогают вам определить, что относится к "потрошкам" реализации, а что нет. Публичная область видимости говорит всем остальным: смотрите, я предоставляю вот этот функционал:
class RepositoryFactory { public function getRepository(string clazz) { ... } }
Все методы, которые относятся к внутренностям проекта, должны быть private или protected - это не защита от хокиров, это способ скрыть ненужное от тех, кто использует ваш класс
class RepositoryFactory { private function checkClassExistence(string clazz) { ... } }
В данном случае указанный метод вряд ли будет интересен внешнему миру, он нужен только для помощи публичным методам, поэтому он скрывается.
Разница между protected и private заключается лишь в том, что protected можно переопределить в классе-наследнике, таким образом тот же RepositoryFactory может проводить какие-то свои внутренние проверки прежде чем предпринимать какие-то действия - и эти проверки могут быть расширены или сужены в классе-наследнике. Чтобы предоставить такую возможность наследникам, метод объявляется как protected:
class RepositoryFactory { protected function isValidRepositoryClazz(string clazz) { ... } }
Обычно такой функционал требуется в очень редких случаях, и практически вся внутрянка выносится в private
Модификатор static не является модификатором области видимости и управляет контекстом, в котором существует поле или метод. В обычном случае мы оперируем в контексте конкретного экземпляра класса, в случае употребления static мы оперируем в контексте самого класса; таким образом статические методы не имеют this и могут быть вызваны из любой части программы, а статические переменные существуют только в единственном экземпляре во всей программе (в отличие от полей экземпляра, привязанных к конкретному экземпляру).

Комментариев нет:

Отправить комментарий