Все сводится к инкапсуляции. Это означает скрывать внутреннюю часть класса и просто заботиться о том, что он делает. Если вы хотите иметь класс обработки кредитной карты, вам не важно, как он обрабатывает кредитную карту. Вы просто хотите иметь возможность: $creditCardProcessor->charge(10.99, $creditCardNumber);
и ожидать, что это сработает.
Делая некоторые методы общедоступными, а другие - частными или защищенными, мы оставляем доступ другим, чтобы они знали, откуда безопасно вызывать код. Публичные методы и переменные называются интерфейсом.
Для любого класса у вас есть реализация . Вот как класс выполняет свои обязанности. Если это класс создания смузи, то как класс добавляет ингредиенты, какие ингредиенты он добавляет и т. Д., Все это часть реализации. Внешний код не должен знать и / или заботиться о реализации.
Другая сторона класса это его интерфейс . Интерфейс - это открытые методы, которые разработчик класса намеревался вызывать из внешнего кода. Это означает, что вы должны иметь возможность вызывать любой публичный метод, и он будет работать правильно.