我们看到laravel的官方路由是这样写的:
Route::get('user/{id}', function ($id) {
return 'User '.$id;
});
看起来相当优雅,最关键的是这种方式能够监听REQUEST_URI,那我也来实现一个。
具体如下:
public static function get( $rules, $callback ){
if ( $_SERVER['REQUEST_METHOD'] !== strtoupper( __FUNCTION__ ) ) {
exit('非法请求!');
}
$uri = trim( $_SERVER['REQUEST_URI'], '/' );
preg_match( '/^' . $rules . '/', $uri, $matches);
if ( isset( $matches[1] ) && is_numeric( $matches[1] ) ) {
$callback( $matches[1] );
}else{
$router = new self();
$router->go();
}
}
调用方式如下:
Router::get( 'user\/(\d+)', function( $ID ){
include( CTLPATH . DS . 'UserController.php' );
$user = new UserController();
call_user_func( [ $user, 'user' ], $ID );
} );
实现关键点是什么?
这个两个函数使用的关键点查看官网就明白了。
