@IgorNoskov

Как оформить вызов методов один за другим?

Здравствуйте! Реализую класс, у которого один публичный метод и остальные скрытые. Снизу приведёна примерная структура класса. То есть в нём публичный метод вызывает по цепочке один за другим приватные методы, но может также прекратиться на любом из методов. Такой подход нормальный или для такой логики есть более изящное решение? Подскажите пожалуйста.
class Test
{
    public function start()
    {
        try {
            // do something...
            return $this->one();
        } catch (Throwable $exception) {
            // do something...
        }

        return false;
    }

    private function one()
    {
        try {
            // do something...
            return $this->two();
        } catch (Throwable $exception) {
            // do something...
        }

        return false;
    }

    private function two()
    {
        try {
            // do something...
            return $this->three();
        } catch (Throwable $exception) {
            // do something...
        }

        return false;
    }

    private function three()
    {
        try {
            // do something...
            return true;
        } catch (Throwable $exception) {
            // do something...
        }

        return false;
    }
}

$test   = new Test();
$result = $test->start();
  • Вопрос задан
  • 907 просмотров
Решения вопроса 4
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
Не знаю что конкретно вы делаете, но, возможно, вам нужна цепочка обязанностей.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Суть вопроса абсолютно непонятна.
Термин "вызов "по цепочке" имеет совершенно определенное значение, которое не имеет ничего общего с вызовом нескольких методов подряд. Это сильно сбивает с толку.

плюс абсолютно бессмысленный код, который вообще ничего не показывает, даже пресловутый "вызов по цепочке"

плюс непонятно, в чем конкретно вопрос.
можно ли в start() написать
$this->one()
$this->two()
$this->three()
?

Можно
Ответ написан
anton_reut
@anton_reut
Начинающий веб-разработчик
Только недавно осваивал подобное. Так как такие "каскады" функций часто встречаются во фреймворках.
Суть в том что каждый предыдущий метод должен возвращать объект $this (либо другой объект), общая суть - метод может вызывать только объект поэтому конструкция $x->metod()->metod2(); означает что первая функция $x->metod() возвращает некий объект и уже у него мы вызываем второй метод. Вот мой пример:
class Mailer {
	
	public $from;
	public $to;
	public $subject;
	public $message;

	public function setFrom(){
		$this->from = 'my@mail.ru';
		return $this;
	}
	
	public function setTo(){
		$this->to = 'you@mail.ru';
		return $this;
	}
	
	public function setSub(){
		$this->subject = 'Hello!';
		return $this;
	}
	
	public function setMess(){
		$this->message = 'Good morning friend.';
		return;
	}
	
	
}

$x = new Mailer();
$x->setFrom()->setTo()->setSub()->setMess();

// Смотрим что получилось:
echo $x->from . "<br>";
echo $x->to . "<br>";
echo $x->subject . "<br>";
echo $x->message . "<br>";
Ответ написан
@AlexSku
не буду отвечать из-за модератора
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы