Заранее извиняюсь, если вопрос глупый, Гуглил долго, но так и не нашел ответа.
Допустим, есть класс DataKeeper:
class DataKeeper {
private $data;
public function setData($data) {
// реализация
}
public function getData() {
// реализация
}
public function saveData() {
// реализация
}
private function processData() {
// реализация
}
}
Тому, кто будет использовать класс нет необходимости знать, как именно работают функции. Ему достаточно знать только о наличии открытых функций, с которыми он может работать.
Раскрытие деталей реализации класса я хочу вынести в отдельный файл, а в «основном» иметь что-то типа:
class DataKeeper {
public function getData()
public function setData($data)
public function saveData()
}
Как это сделать?
Upd:
Спасибо за ответы про интерфейсы. Наверное, я туплю, но мне кажется, это не решение проблемы.
Живой пример:
Вот, допустим, есть у меня файл DataKeeper.php. В нем объявлен интерфейс DataKeeper.
Его реализует класс FileDataKeeper (сохраняет данные в файл), находящийся в своём файле.
class FileDataKeeper implements DataKeeper
Получается, что в проекте, мне все равно надо будет писать:
$dk = new FileDataKeeper;
В файле DataKeeper.php (а только его, по идее, мы должны смотреть) нет ни слова о FileDataKeeper.
Кроме того, если я захочу поменять реализацию хранения, заменив класс FileDataKeeper, например, на MySQLDataKeeper, интерфейс и открытые методы-то не изменятся, а вот «new FileDataKeeper» надо будет менять по всему проекту.