【问题标题】:PHP Closures - How do I call a class function with $thisPHP 闭包 - 如何使用 $this 调用类函数
【发布时间】:2012-04-08 01:27:54
【问题描述】:

我在使用 PHP 闭包时遇到了一点问题。

好的,假设我有:

$router->bind('~/~', function()
{
    print "I'm on the home page";
});

$shel = new Shel($config, $router);
$shel->start();

现在,我所有的函数都被 Shel 调用了。在 Shel 内部,有一个函数 load()。有没有办法使用 $this 从我绑定的闭包中调用 Shel::load()?

干杯!

【问题讨论】:

  • 我在 5.3.8。 Gordon,我阅读了那个帖子,但我认为我的问题有点不同,我应该在原帖中指定,现在已经更新了。

标签: php closures


【解决方案1】:

PHP 5.3: https://wiki.php.net/rfc/closures/object-extension

对于 PHP 5.3 $this 对闭包的支持已被删除,因为没有 可以就如何以理智的方式实施它达成共识。这 RFC 描述了实现它的可能途径 下一个 PHP 版本。

因此,在 PHP 5.3 中,您必须进行一些变通:

$that = $this;
$router->bind('~/~', function() use ($that)
{
    print "I'm on the home page";
});

对于 5.4,您可以只使用 $this。

【讨论】:

  • 我在 5.3.8。但是,我仍然不完全确定这会有什么帮助?我刚刚意识到我忘了提到问题的一个重要方面,我会更新帖子。
  • 我明白了,在这种情况下,您必须在 将 $router 对象设置为 Shel 之后绑定,然后您可以使用 ($shel) 并调用它使用 $shel->load()。其他方式是不可能的,因为匿名函数不知道范围。
  • 嗯,我明白了。在那种情况下,我应该让我的路由器类静态吗?这是我能看到的最简单的方法。
  • 嗯,是的,您需要将load() 设为静态。类本身在 PHP 中不能是静态的。
  • 呃,这就是我从 PHP 中休息时发生的事情。哈哈干杯!
猜你喜欢
  • 2017-11-12
  • 1970-01-01
  • 2017-01-04
  • 2015-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多