今天试了一下Slim框架,准备弄个编辑器,第一次遇到use
关键字。
Slim的路由通常由路径+匿名函数组成, 例如这样:
<?php
$app->get("/path/:arg", function($arg) {
...
});
怎样把$app
传进路由里的匿名函数呢?
以前的我会用global
:
$app->get("/path/:arg", function($arg) {
global $app;
...
});
如果遇到不是全局的变量,global
就无能为力了。
现在,我知道了use
:
$app->get("/path/:arg", function($arg) use ($app) {
...
});
哦,PHP的匿名函数是不会自动捕获自由变量的,所以才要用use
来传递从而实现闭包,这突然就让我想起C++里的lambda开头的那个[]。
例如Haskell里就会自动捕捉:
mkCounter = do
counterRef <- newIORef (0::Int)
return $ mofidyIORef counterRef (+1) >> readIORef counterRef >>= print
到了PHP就要自己选择:
function mkCounter() {
$count = 0;
return function() use (&$count) { // 按引用传递
echo ++$count;
};
}
有时候自动很方便,有时指明会更明确,虽然我更喜欢自动。
PS: 发现如果代码不加<?php
,php代码不会高亮。