daemonhk
@daemonhk
ПсиХоПат

Кто пояснит данную конструкцию?

Говорю сразу, знания по ООП очень минимальны, буквально что это такое и примерно как с этим работать. Собственно сабж: открываем примеры кода, написанные на Laravel или Yii2, в частности по работе с ORM (вроде бы), и видим такое:

$flights = App\Flight::where('active', 1)
               ->orderBy('name', 'desc')
               ->take(10)
               ->get();


Хм... ОК, значит метод where у нас статичный, а остальные нет? Но ведь мы не можем вызывать остальные методы без экземпляра класса Flight, значит используется __construct()? Но почему следом вызывается статичный метод?

Пытался ковырять исходники фреймов, но, сами знаете, абстракция на абстракции и абстракцией погоняет. Может кто-нибудь разъяснить и показать на небольшом примере как это работает по пунктам?

P.S. А кто-нибудь сможет привести простой пример таких классов? Или хотя бы ткнуть, куда нужно копать, что читать/изучать? Применима ли такая конструкция только к работе с БД? Или можно, например, создать класс, который отвечает за, скажем, постраничную навигацию и такими доп методами можно будет настраивать ее?
  • Вопрос задан
  • 220 просмотров
Пригласить эксперта
Ответы на вопрос 3
Каждый из этих методов возвращает экземпляр своего же класса
Данный подход именуется как method chaining
where {
....
return $object;
}

orderBy{
....
return $object;
}

take{
....
return $object;
}
Ответ написан
Комментировать
RiseOfDeath
@RiseOfDeath
Диванный эксперт.
Я не силен именно в PHP, но есть предположение что App\Flight синглтон, а where статичная функция которая "знает" адрес нужного объекта (ну или как это в php именуется).

Ну а внутри там скрыт какой-то запрос к БД, судя по именам функций и аргументам, и там не статичные методы т.к., вероятно, результат запроса уже вполне себе не синглтон, а нормальный объект.
Ответ написан
mhthnz
@mhthnz
PHP, YII2, Golang, Linux
Статичный метод отдает объект класса QueryBuilder
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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