我创建了一个基本类来稍微玩一下 Closure 对象。我不明白这个应用程序/闭包的行为,所以我想问一些事情。此刻我的头脑很混乱,所以我不知道为什么会运行或为什么不运行。
<?php
class Route
{
public static $bindings = array();
public static $dispatch = array();
public static function bind($bind)
{
self::$bindings[] = $bind;
}
public static function getAllBindings()
{
return (array) self::$bindings;
}
public static function get($binding, Closure $dispatch)
{
if(in_array($binding, self::$bindings))
{
if(is_callable($dispatch))
{
return call_user_func($dispatch);
}
else
{
die("Dispatch method is not callable.");
}
}
else
{
die("Binding is not found in bindings array.");
}
}
public static function test()
{
echo "Test ran!";
}
}
基本上,我们绑定绑定(例如 /admin、/account、/profile 等)。然后,我们尝试使用闭包调用方法。
// Let's bind account and admin as available bindings
Route::bind('account');
Route::bind('admin');
// Let's try doing a get call with parameter "account"
Route::get('account', function() {
// This is where I'm stuck. See below examples:
// Route::test();
// return "test";
// return "testa";
// return self::test();
});
如果您在上面检查过,这是我的问题:
- 如果我提供了一个不存在的方法,
is_callable
检查不会运行并且我得到一个php fatal error
. 检查不存在的方法不是is_callable
有效的检查吗?为什么会这样? - 如果我
return "Test";
在闭包中提供,我$closure parameter in get method
会包含"Test"
字符串吗? 我可以在闭包内传递来自不同类的方法吗?喜欢:
Route::get('account', function () { if(User::isLoggedIn() !== true) return Error::login_error('Unauthorized.'); });
- 如果是这样,这个调用是在哪个范围内进行的?PHP 在闭包中的作用域,还是 call_user_func 在 Route 类的作用域内调用它,因为它是通过闭包传递给它的?(为了更清楚一点,PHP 的作用域可以做,
$route->get
但闭包作用域可以使用$this->get
) - 有没有办法转储像 var_dump/print_r 这样的闭包对象来查看它的内容?
一个简短的指导会让我继续前进。我知道 PHP,但使用闭包对我来说还是很新鲜的。
非常感谢,感谢您的回复。