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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
26 апр. 2024, в 10:21
1200 руб./в час
26 апр. 2024, в 10:10
1000 руб./за проект