You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中function()与fn()执行结果不同的原因咨询

问题:PHP普通匿名函数与箭头函数执行结果差异原因分析

两段代码的核心差异在于PHP对普通匿名函数和箭头函数(fn())中$this的绑定规则不同:

1. 普通匿名函数的$this行为

在类方法内部定义的普通匿名函数(function() {}),默认不会自动继承外部作用域的$this(即当前类实例)。如果没有通过use关键字显式引入$this,闭包内部的$this无法指向类实例,导致对$this->checked的赋值操作无效。

要让第一段代码正常工作,需要显式通过use引入$this:

$this->allIds->each(function ($id) use ($this) {
    $this->checked[$id] = $this->checkedAll;
});

2. 箭头函数的$this行为

箭头函数(PHP 7.4+引入)的设计逻辑是自动继承外部作用域的$this,无需额外声明。它会直接使用定义时所在上下文的类实例$this,所以第二段代码中,$this->checked[$id]能正确操作类实例的属性,得到预期的赋值结果。

总结

  • 普通匿名函数:需显式通过use($this)才能访问外部类实例的$this
  • 箭头函数:自动继承外部作用域的$this,无需额外操作

内容的提问来源于stack exchange,提问作者ZoKeR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 17:04:59