php真静态,PHP静态匿名函数真的有用吗?

是的,这是5.4中完全有效的语法.

基本上,它会阻止当前类自动绑定到闭包(实际上,它会阻止所有绑定,但稍后会更多).

class Foo {

public function bar() {

return static function() { var_dump($this); };

}

public function baz() {

return function() { var_dump($this); };

}

}

如果我们在5.4上实例化它,则闭包bar()返回将$this设置为null.就像你对它进行静态调用一样.但是baz()会将$this设置为你调用baz()的foo实例.

所以:

$bar = $f->bar();

$bar();

结果是:

Notice: Undefined variable: this in /in/Bpd3d on line 5

NULL

$baz = $f->baz();

$baz();

结果是

object(Foo)#1 (0) {

}

合理?大.

现在,如果我们在函数外部定义闭包会发生什么:

$a = function() { var_dump($this); };

$a();

我们得到null(和通知)

$c = $a->bindTo(new StdClass());

$c();

我们得到StdClass,正如您所期望的那样

$b = static function() { var_dump($this); };

$b();

我们得到null(和通知)

$d = $b->bindTo(new StdClass());

$d();

这是事情变得有趣的地方.现在,我们收到警告,通知和null:

Warning: Cannot bind an instance to a static closure in /in/h63iF on line 12

Notice: Undefined variable: this in /in/h63iF on line 9

NULL

所以在5.4中,你可以声明一个静态闭包,这导致它永远不会将$this绑定到它,也不能将对象绑定到它…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值