Обращение к методу в PHP

117
27 марта 2018, 02:07

Здравствуйте! Сразу хочу извиниться за глупый вопрос)) Начал изучать ООП в php и наткнулся на такую запись $this->MsLoader->MsHelper->addStyle('abc');. Понимаю когда обращаются, например, так $this->MsLoader();. Первая запись означает что мы обращаемся ко всем методам подряд при этом возвращая значение и используя потом это значение в следующем методе или я совсем неправ?)

Answer 1

Это называется цепочкой вызовов. В каждом методе класса, который предполагает вызов дальнейших методов по цепочке, нужно возвращать объект этого класса, т.е. $this

Для примера:

Class Foo {
  public $bar;
  public $baz;
  public function setBar() {
    $this->bar = 'bar';    
  }
  public function setBaz() {
    $this->baz = 'baz';    
  }
}

Использовать его мы можем только таким образом:

$fooClass = new Foo();
$fooCLass->setBar();
$fooClass->setBaz();

Но если в каждом из этих сеттеров мы вернем $this, у нас получится следующее:

Class Foo {
  public $bar;
  public $baz;
  public function setBar() {
    $this->bar = 'bar';    
    return $this;
  }
  public function setBaz() {
    $this->baz = 'baz';    
    return $this;
  }
}

То можно будет сделать вот следующим образом:

$fooClass = (new Foo())->setBar()->setBaz(); 

Надеюсь, что объяснил понятно :)

READ ALSO
Laravel: Имеет ли смысл выносить SQL-запросы из контроллера в модель?

Laravel: Имеет ли смысл выносить SQL-запросы из контроллера в модель?

У меня в контроллере стало слишком много SQL-запросовВ смысле, самих запросов-то не так много, но они довольно длинные

132
не сохраняет массив объектов класса

не сохраняет массив объектов класса

Массив books заполняется, но после перехода в main массив очищается, и присваивается другой адресКак сделать, чтоб поиск происходил в заполненном...

178
Переосмысление указателей

Переосмысление указателей

Я часто пишу разную ерунду для эксперимента (чтоб получше понять что к чему)Вот одна из них:

189
Ошибка: During startup program exited with code 0xc0000135 при вызове функции с Opencv

Ошибка: During startup program exited with code 0xc0000135 при вызове функции с Opencv

Я переустанавливал WIndows, qt у меня находиться тут:

181