Саша в твиттере подкинул интересную ссылку: новую парадигму создания микро-фреймворков, а именно — массиво-ориентированную парадигму (array-oriented programming). Кому лень идти по ссылке, вот пример реализации:
$app = array(
'session' => array(),
'request' => array(
'method' => 'GET',
'uri' => '',
'data' => array()
),
'response' => array(
'body' => '',
'headers' => array()
),
'errors' => array(
404 => function(&$request, &$response) {
$response['body'] = '404 Not Found';
$response['headers'][] = 'Status: 404';
}
),
'routes' => array(
'/' => function(&$request, &$response) {
$response['body'] = 'GET /';
},
'/test' => function(&$request, &$response) {
$response['body'] = 'GET /test';
}
),
'route' => null,
'bootstrap' => array(
'request' => function(&$app) {
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$app['request']['is_post'] = true;
}
$app['request']['uri'] = '/' . trim($_SERVER['REQUEST_URI'], '/');
$app['request']['method'] = strtoupper($_SERVER['REQUEST_METHOD']);
$app['request']['data'] = $_REQUEST;
},
'router' => function(&$app) {
$route = $app['request']['uri'];
if (!isset($app['routes'][$route])) {
$app['route'] = $app['errors'][404];
return;
}
$app['route'] = $app['routes'][$route];
}
),
'dispatch' => function(&$app) {
$route = $app['route'];
$route($app['request'], $app['response']);
}
);
foreach ($app['bootstrap'] as $bootstrap) {
$bootstrap($app);
}
$app['dispatch']($app);
foreach ($app['response']['headers'] as $header) {
header($header);
}
if ($app['response']['body'] !== null) {
echo $app['response']['body'];
}
Не правда-ли, выглядит очень интересно! Конечно-же, есть свои минусы и они довольно ощутимые, но иногда такой подход более чем полезен. Например, когда важны скорость выполнения и потребляемые ресурсы. Код выше, на локальной машине, дает следующие результаты:
time: 0.000189065933228 ms;
memory: 4216 b
Как вам в сравнении с ko3, например? )