Структура функции ООП

221
29 октября 2017, 20:20
DB::table('users')->select('name','surname')->where('id', $userId)->get();

Какова структура класса в данном коде?

Получается вызывается статический метод table класса DB, а select,where это что, переменные класса? А get() функция в функции?

Answer 1

Последовательное выполнение методов класса DB:

  1. DB::table('users') - выполняется метод table, вернет экземпляр класса DB для построения запроса к базе данных, связанный с таблицей users;
  2. ->select('name','surname') - выполняется метод select с аргументами переменной длины;
  3. ->where('id', $userId) - выполняется метод where с аргументами переменной длины;
  4. ->get() - выполняется метод get который формирует запрос и получает результаты.

В пунктах 1, 2, 3 возвращается экземпляр класса DB (object()) для построения запроса к БД, вероятнее всего при выполнении этих методов происходит присвоение переменным класса DB соответствующих значений для запроса, которые потом используются для построения запроса при выполнении ->get().

UPD - полезные ссылки

Как верно отметил @Deonis подобная реализация называется "Текучий интерфейс (fluent interface)".

Полезные ссылки с примерами и описанием:

  1. Википедия - «Fluent interface»
  2. Хабрахабр - Шаблон программирования «Текучий интерфейс» в PHP
  3. Хабрахабр - «Расширенный текучий интерфейс»
  4. Хабрахабр - «Шаблоны проектирования с человеческим лицом»
READ ALSO
Вывод в alert выделенного текста работает не из всех мест

Вывод в alert выделенного текста работает не из всех мест

обычный текст при выделении и нажатии кнопки - выводится, а вот тот, который подгружается в iframe - нет, как это поправить?

246
PHP удаление тегов

PHP удаление тегов

Здравствуйте добрые люди, не судите строго за детский вопрос, я только учусьВ PHP есть функция strip_tags, которая удаляет html теги в строке

240
MySQL запись в базу не происходит

MySQL запись в базу не происходит

Вот таким образом произвожу запись в базу:

206