Зачем делают так много методов в классе?

Всем привет! Объясните плз, зачем в классах делают такие методы?

class Person {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }

    public function getTitle() {
        return $this->getName()." the person";
    }

    public function sayHello() {
        echo "Hello, I'm ".$this->getTitle()."<br/>";
    }
}

$geekObj = new Person("Ludwig");
$geekObj->sayHello();


выходит мы вызываем метод getTitle() -> getName(), который в итоге выводит всего-то переменную $name.
Почему бы просто не обратиться к ней уже в методе sayHello() ?
  • Вопрос задан
  • 572 просмотра
Решения вопроса 4
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Потому что в будущем вы сможете безболезненно добавить логику в метод (получение значения из конфига, из базы, вызов проверки авторизации и т.п., для сеттера - валидация данных). Если же у вас будет голое поле, то придется изменять клиентский код, а это нарушает абстракцию.

Правило хорошего тона: API класса должен быть доступен только через методы или properties (что, по сути - синтаксический сахар над методами), а поля должны быть только private/protected.
Ответ написан
@oxidmod
первое что приходит в голову: геттер может дополнительно обрабатывать данные (например екранировать и так далее). Соотвественно читая напрямую из свойства придется дублировать эту логику. Хотя в большинстве случаев такого поведения нет. я Тоже внутри класса обычно обращаюсь напрямую к полю, при условии тчо оно было установлено через конструктор
Ответ написан
@Quieteroks
php программист
Это называется инкапсуляция. Почитайте, Вам понравится. Да и вообще все принципы ООП.
В ООП не используют большие методы. Большие методы дробят на мелкие, выполняющие больше полезных действий. А много методов, которые Вы указали, скорее всего часто встречаются их вызовы, так сказать вынос дублирующего кода в модель. В тоже время обращение к методу получения имени гарантирует, совместимость кода. Завтра Вы будете хранить не имя, а ссылка на языковой файл, а через getName отдавать содержимое поля в языковом файле.
Ответ написан
saboteur_kiev
@saboteur_kiev
build engineer
Эти методы называются геттеры, к этому есть и сеттеры.
Почитайте для чего они нужны. Это популярные решения для ООП.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ЧИТАЙ-ГОРОД Москва
от 140 000 до 210 000 ₽
Директ Кредит Казань
от 70 000 до 120 000 ₽
Zoon Санкт-Петербург
от 120 000 до 180 000 ₽
26 февр. 2020, в 05:15
5000 руб./за проект
26 февр. 2020, в 01:14
600 руб./в час
26 февр. 2020, в 01:13
1500 руб./за проект