Задать вопрос

Как реализовать такой текучий интерфейс в php?

Мне очень понравилась идея текучего интерфейса, который используется в Laravel 4 и Yii2. Но, к сожалению, я не могу до конца понять как реализованы такие вещи.

Вот пример:
Route::get('/page/{id}', 'Admin@page')->where(['id' => $id]);

Как реализовать подобное? Самое главное:
- как реализовать с помощью статического метода(Route::get)?
- как сделать так, чтобы несмотря на то, что параметр передаётся последним (where), он был доступен для метода get?
- и наконец, как в таком примере сделать так, чтобы все необходимые действия проходили в методе get, и он был не просто методом, который возвращает какой-то класс.

---
UPD: вот смотрите, в чём у меня большая затычка:

Route::set('11', '22')->where('33');

class Route 
{
    public static function set($uri, $action)
    {
        return new Router($uri, $action);
    }
}

class Router
{
    private $params;
    private $uri;
    private $action;

    public function __construct($uri, $action)
    {
        $this->uri    = $uri;
        $this->action = $action;

        $this->master();
    }

    public function where($params)
    {
        $this->params = $params;
    }

    public function master()
    {
        echo $this->uri . ' | ' . $this->action . ' | ' . $this->params;
    }

    // ... ниже геттеры-сеттеры


Ну и мне выдаёт только такую строку "11 | 22 |". Я понимаю, что вызываю $this-master() из констуктора, когда ещё не сработал метод where. Но как по другому? Что я упускаю?
  • Вопрос задан
  • 2972 просмотра
Подписаться 4 Оценить Комментировать
Ответ пользователя tuxx К ответам на вопрос (2)
@tuxx
Ответ написан
Комментировать