Задать вопрос
daemonhk
@daemonhk
ПсиХоПат

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

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

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


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

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

P.S. А кто-нибудь сможет привести простой пример таких классов? Или хотя бы ткнуть, куда нужно копать, что читать/изучать? Применима ли такая конструкция только к работе с БД? Или можно, например, создать класс, который отвечает за, скажем, постраничную навигацию и такими доп методами можно будет настраивать ее?
  • Вопрос задан
  • 221 просмотр
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽