PHP回调-如何在类中执行它?

PHP回调-如何在类中执行它?,php,lambda,closures,anonymous-function,php-5.6,Php,Lambda,Closures,Anonymous Function,Php 5.6,我试图了解在现代框架中,PHP闭包/回调函数在路由请求中的流行用法。例如,Slim允许您执行以下操作: $app->get('/hello/:name', function ($name) { echo "Hello, $name"; }); $app->run(); 我的实验: class Foo { private $string; private $callback; public function get($string, $callbac

我试图了解在现代框架中,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();

如何在类中执行回调,使其返回
Hello World

在设计框架时,为了获得更好的灵活性,它稍微复杂一些。
但在这个简单的例子中,你可以使用或。我建议使用,因为传递多个参数时更容易:


根据示例代码,应该是这样的:


抱歉,我在发帖时没有看到@elipsmartins的答案——我写作时它还没有出现。我们的答案其实是一样的。我在Stackoverflow还是新手,不用担心。这也有帮助!;)
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'