PHP 回调 - 如何在 class 中执行?
PHP callback - how to execute it in a class?
我正在尝试了解 PHP 在现代框架中路由请求中函数的闭包/回调的流行用法。例如 Slim,允许您执行以下操作:
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
我的实验:
class Foo
{
private $string;
private $callback;
public function get($string, $callback)
{
$this->string = $string;
$this->callback = $callback;
}
public function run()
{
return $this->get($this->string, $this->callback);
}
}
$Foo = new Foo;
$Foo->get('/world', function($name) {
return "Hello " . $name;
});
$Foo->run();
如何在 class 中执行 回调 所以它 return Hello World
?
在设计框架时,为了获得更好的灵活性,它会稍微复杂一些。
但是在这个简单的情况下,您可以简单地使用 call_user_func_array() or call_user_func(). I adivise to use call_user_func_array() 因为传递许多参数时它更容易:
class Foo
{
private $string;
private $callback;
public function get($string, callable $callback)
{
$this->string = $string;
$this->callback = $callback;
}
public function run()
{
return call_user_func_array($this->callback, [$this->string]);
# OR
# return call_user_func($this->callback, $this->string);
# OR
#$fn = $this->callback; return $fn($this->string);
}
}
$Foo = new Foo;
$Foo->get('/world', function($name) {
return "Hello " . $name;
});
print $Foo->run();
根据您的示例代码,它应该是这样的:
public function get($string, $callback)
{
//assign input parameter to object's propety
$this->string = $string;
$this->callback = $callback;
}
public function run()
{
/* if you want to avoid using this variable
use call_user_func */
$callback = $this->callback;
// run the callback
return $callback($this->string);
}
}
$Foo = new Foo;
$Foo->get('world', function($name) {
return "Hello " . $name;
});
$return = $Foo->run();
var_dump($return); //this will return 'Hello world'
我正在尝试了解 PHP 在现代框架中路由请求中函数的闭包/回调的流行用法。例如 Slim,允许您执行以下操作:
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
我的实验:
class Foo
{
private $string;
private $callback;
public function get($string, $callback)
{
$this->string = $string;
$this->callback = $callback;
}
public function run()
{
return $this->get($this->string, $this->callback);
}
}
$Foo = new Foo;
$Foo->get('/world', function($name) {
return "Hello " . $name;
});
$Foo->run();
如何在 class 中执行 回调 所以它 return Hello World
?
在设计框架时,为了获得更好的灵活性,它会稍微复杂一些。
但是在这个简单的情况下,您可以简单地使用 call_user_func_array() or call_user_func(). I adivise to use call_user_func_array() 因为传递许多参数时它更容易:
class Foo
{
private $string;
private $callback;
public function get($string, callable $callback)
{
$this->string = $string;
$this->callback = $callback;
}
public function run()
{
return call_user_func_array($this->callback, [$this->string]);
# OR
# return call_user_func($this->callback, $this->string);
# OR
#$fn = $this->callback; return $fn($this->string);
}
}
$Foo = new Foo;
$Foo->get('/world', function($name) {
return "Hello " . $name;
});
print $Foo->run();
根据您的示例代码,它应该是这样的:
public function get($string, $callback)
{
//assign input parameter to object's propety
$this->string = $string;
$this->callback = $callback;
}
public function run()
{
/* if you want to avoid using this variable
use call_user_func */
$callback = $this->callback;
// run the callback
return $callback($this->string);
}
}
$Foo = new Foo;
$Foo->get('world', function($name) {
return "Hello " . $name;
});
$return = $Foo->run();
var_dump($return); //this will return 'Hello world'