[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Методы класса в его конструкторе
bombey
Здравствуйте. Для того что бы не передавать аргументы в каждый метод, я присваиваю значения полям в конструкторе. Потом эти переменные я использую внутри методов.

Правильно ли так делать? Или это неверный подход?




class Myclass{

private $a;
private $filepath;

function __construct()
{
$this->a = $this->generate_a();
$this->filepath = $this->gen_filapath();
}

function generate_a()
{
// что то возвращаем
}

function gen_filepath()
{
// что то возвращаем
}



function all()
{
// используем $this->a и $this->filepath в методах этого класса
}

}


twin
Всё зависит от задачи. Одно могу сказать, private - это зря. Лучше protected.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Another Reality
Если в методах тебе нужны будут уже инициализированные поля - да, все верно.
AllesKlar
будет полезно, когда вычисляемое значение используется в нескольких местах, например, типичный геттер.
если одноразовое обращение, то смысла нет.

private $foo;

public function getFoo() {
if(is_null($this->foo)) {
$this->foo = ... // чет вычисляем, с базы читаем и т.д.
}
return $this->foo;
}

.....
$bar = $obj->getFoo();
....
....

$fooBar = $obj->getFoo(); // тут не будет повторного вычисления




_____________
[продано копирайтерам]
bombey
Как раз эти значения и используются во многих методах класса. Кажись я понемногу начинаю понимать все преимущества ООП)
Спасибо за ответы.
Another Reality
Цитата (bombey @ 31.08.2016 - 20:44)
Кажись я понемногу начинаю понимать все преимущества ООП

Сразу ссылка на текущий срач.
Или он будет еще и тут biggrin.gif
Guest
Цитата (bombey @ 31.08.2016 - 20:44)
Как раз эти значения и используются во многих методах класса. Кажись я понемногу начинаю понимать все преимущества ООП)

Нет, скорее нарушаешь Informational Expert из GRASP https://ru.wikipedia.org/wiki/GRASP
Guest
и High cohesion
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.