Мне очень понравилась идея текучего интерфейса, который используется в 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. Но как по другому? Что я упускаю?