Различают три модификатора доступа:
- public (общедоступный) — позволяет иметь доступ к свойствам и методам классам из любого места: из класса, в котором он объявлен, из класса-наследника, из вне класса.
- protected (защищенный) — позволяет иметь доступ и родительскому (в котором определен сам член класса), и наследуемым классам; из кода за пределами класса доступа нет.
- private (закрытый) — ограничивает область видимости так, что доступ к нему имеет только тот класс, в котором объявлен сам элемент.
Эти модификаторы есть у переменных и методов класса. По умолчанию методы все public.
Принцип работы модификаторов доступа
Справа вверху есть класс Myclass. У него три свойства — public, protected,private. Плюс у него есть метод myMethod с такими же модификаторами. Есть класс-наследник NewClass (справа внизу). У него тоже свой метод. Создаем по одному объекту от каждого класса (левый рисунок). И проверяем, начиная с $obj:
- Обращаемся к публичному свойству — ДА.
- Обращаемся к protected — НЕТ, т.е. надо обратиться к методу класса MyClass, который в свою очередь обратится к protected — ДА.
- Обращаемся к private — НЕТ, т.е. надо обратиться к методу класса MyClass, который в свою очередь обратится к private — ДА.
Проверяем, начиная с $obj1:
- Обращаемся к публичному свойству — ДА.
- Обращаемся к protected — НЕТ, т.е. надо обратиться к методу класса-наследника NewClass, который и обратится к protected класса-родителя — ДА.
- Обращаемся к private — НЕТ, надо обратиться к методу класса-наследника NewClass, который и обратится к private класса-родителя — НЕТ. Это не сработает, т.к. к private можно обратиться только из класса, в котором он сделан.
- Чтобы обойти неудачу, надо в классе-наследнике вызвать метод класса-родителя, который в свою очередь обратится к private в классе MyClass. И все получится.