Это полезно, если вы хотите применить ООП практики, такие как Скрытие информации ( Инкапсуляция ).
Если вы объявляете членов классакак private
, они не могут быть доступны из кода за пределами вашего класса.Вы должны предоставить методы для доступа к ним.Это отделяет интерфейс вашего класса от фактической реализации.
Другой код, который использует ваш класс, не должен знать имя члена класса или как вы фактически храните информацию внутри.
Пример:
Рассмотрим класс Books
, который как-то дает мне список книг.Я могу определить public
член, который содержит массив книг:
class Books {
public $list;
}
С другой стороны, если я определю метод getList()
, я могу изменить реализацию позже, не затрагивая код, которыйиспользует класс:
class Books {
private $list;
public function getList() {
// get list from database, from XML, etc.
// might use $list internally but does not have to
}
}
Очевидно, вам не нужны такие модификаторы, как private
, protected
или public
для реализации этого поведения, но это приводит к лучшей структурированностикод и более понятные интерфейсы.Представьте, что у вас есть класс, который имеет public $list
и метод getList()
.Как узнать, какой из них использовать?
Это относится не только к получению значений, но особенно к настройке значений.
Нет недостатков, если их использовать, только преимущества ИМХО.Разница между ними заключается в сфере видимости.public
члены могут быть доступны из внешнего кода, protected
члены могут быть доступны из наследующих классов и private
члены только из класса.
Методы также могут иметь эти модификаторы и преследовать аналогичную цель.Например, если метод объявлен как private
, ясно, что это, вероятно, какой-то вспомогательный метод, который используется только для внутреннего использования и не должен вызываться извне.
Такв итоге все сводится к двум вещам:
- Контроль : к каким частям вашего класса можно получить доступ, каким образом
- Самодокументированиеили понимание : другие люди, использующие ваш класс, могут легче понять, к какой части вашего класса они должны получить доступ, а к какой нет.