Использовать свойства объекта в методах или передавать параметры?

Обсуждаем, как правильно строить приложения
Ответить
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Использовать свойства объекта в методах или передавать параметры?

Сообщение Nex-Otaku »

Допустим, для выполнения методов объекта, требуется какая-то информация о состоянии этого объекта.

Предлагается два разных подхода.

1. Передаём в методы параметры.

Код: Выделить всё

class Dancer
{
    private $clothes;
    private $shoes;
    private $music;
    
    public function setScene($clothes, $shoes, $music)
    {
        $this->clothes = $clothes;
        $this->shoes = $shoes;
        $this->music = $music;
    }
    
    public function dance()
    {
        $this->putOnClothes($this->clothes);
        $this->putOnShoes($this->shoes);
        $this->turnOnMusic($this->music);
    }
    
    private function putOnClothes($clothes)
    {
        $clothes->putOn();
    }
    
    private function putOnShoes($shoes)
    {
        $shoes->putOn();
    }
    
    private function turnOnMusic($music)
    {
        $music->turnOn();
    }
}
2. В методах необходимая информация извлекается из свойств объекта.

Код: Выделить всё

class Dancer
{
    private $clothes;
    private $shoes;
    private $music;
    
    public function setScene($clothes, $shoes, $music)
    {
        $this->clothes = $clothes;
        $this->shoes = $shoes;
        $this->music = $music;
    }
    
    public function dance()
    {
        $this->putOnClothes();
        $this->putOnShoes();
        $this->turnOnMusic();
    }
    
    private function putOnClothes()
    {
        $this->clothes->putOn();
    }
    
    private function putOnShoes()
    {
        $this->shoes->putOn();
    }
    
    private function turnOnMusic()
    {
        $this->music->turnOn();
    }
}
Вопрос: какой из этих подходов лучше, и почему?

За первый вариант:
Можно переиспользовать методы в других классах, так как они не привязаны жёстко к объекту.

За второй вариант:
Код компактнее и с виду проще.

P.S.
Тут предполагается, что в методах "putOn..." и т.д. делается какая-то более сложная работа, чем просто один вызов метода. Просто сократил для наглядности. Иначе, конечно, можно было бы всё в одной функции написать.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Использовать свойства объекта в методах или передавать параметры?

Сообщение zelenin »

хотя я сам иногда делаю вариант 1, но выглядеть он тогда должен так:

Код: Выделить всё

class Dancer
{
    private $clothes;
    private $shoes;
    private $music;
    
    public function setScene($clothes, $shoes, $music)
    {
        $this->clothes = $clothes;
        $this->shoes = $shoes;
        $this->music = $music;
    }
    
    public function dance()
    {
        $this->putOnClothes($this->clothes);
        $this->putOnShoes($this->shoes);
        $this->turnOnMusic($this->music);
    }
}

    function putOnClothes($clothes)
    {
        $clothes->putOn();
    }
    
    function putOnShoes($shoes)
    {
        $shoes->putOn();
    }
    
    function turnOnMusic($music)
    {
        $music->turnOn();
    }
по факту мы почему-то засовываем обычные функции в объект, к которому они непосредственно не относятся.

а какой вариант выбрать между 1-м исправленным мною или 2-м - дело вкуса или языкового бэкграунда.
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Использовать свойства объекта в методах или передавать параметры?

Сообщение Nex-Otaku »

Спасибо. Выберу второй вариант, чтобы оставить всё в одном классе.
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Использовать свойства объекта в методах или передавать параметры?

Сообщение anton_z »

Конечно второй, если вы хотите использовать класс как класс, а не как пространство имен для функций.
Ответить