Github:https://github.com/takashiki/cdo
Git@OSC:http://git.oschina.net/takashiki/cdo
使用很简单,不过只支持 pathinfo 模式,贴一段示例代码:
$do = new \Mis\Cdo(); $do->get('/', function () { echo 'hello world'; }); $do->post('/', function () { $name = isset($_POST['name']) ? $_POST['name'] : 'world'; echo "hello {$name}"; }); $do->any('/(\d+)', function ($id) { echo $id; }); /** * When using named subpattern, order of parameters is not matter. * eg. /book/2 */ $do->any('/(?P<type>\w+)/(?P<page>\d+)', function ($page, $type) { echo $type.'<br>'.$page; }); $do->run();
或者:
use Mis\Cdo; Cdo::get('/', function () { echo 'hello world'; }); Cdo::run();
写这个项目的初衷是前断时间在写一个小项目时发现现在绝大多数 PHP 的路由都不足够轻量,在只有各位数的路由时 QPS 也只能达到不使用路由时的一半左右,于是便自己写了一个,欢迎大家批评指教。
这是在 index 文件里直接打印 hello world
的 qps:
这是使用了路由后的qps:
1 BMW 2016-07-02 22:56:48 +08:00 |
![]() | 2 manhere 2016-07-02 23:02:43 +08:00 在用 FastRoute |
3 strong>likezun 2016-07-02 23:09:48 +08:00 造轮子... |
![]() | 4 kumakiti 2016-07-02 23:23:56 +08:00 很棒,特别好的学习资料~ |
![]() | 5 fhefh 2016-07-03 10:51:01 +08:00 nice mark~~~ |
![]() | 6 void1900 2016-07-03 10:55:21 +08:00 |
![]() | 7 102400 2016-07-03 17:19:47 +08:00 几乎所有这种形式的路由都是学习 Sinatra 的吧? |
![]() | 8 sensui7 2016-07-03 17:32:19 +08:00 一楼的 symfony router,醉了, |
![]() | 9 takashiki OP ![]() |
![]() | 10 muyege 2016-07-04 09:31:32 +08:00 https://github.com/oahbuscher/Macaw 一个文件就搞定了,目前能找到的最简单的了 |
![]() | 11 jinzhe 2016-07-04 14:13:05 +08:00 真心不够优雅 |
![]() | 12 ichou 2016-07-05 09:15:42 +08:00 via iPhone 没有实现通配符而使用正则来写路由规则的话,代码可读性不忍直视 |
![]() | 13 JiaFeiX 2016-07-05 09:56:05 +08:00 via iPhone 要性能的话,不是写在 nginx 层面来实现吗? |
![]() | 14 pangliang 2016-07-07 15:48:15 +08:00 真正简单的就是:"约定大于配置" |
![]() | 15 pangliang 2016-07-07 16:16:00 +08:00 盲写一个: list($_,$cls,$func)=explode("/",$_SERVER['REQUEST_URI'],3); include_once($cls.".php"); $obj=new $cls(); $obj->$func($_REQUEST); |