PHP匿名函数不通过use关键字直接传参调用是否为合法语法?
语法合法性结论
你给出的示例1是完全符合PHP规范的合法语法,没有任何问题。
语法逻辑说明
这种写法属于立即执行函数表达式(IIFE),是PHP匿名函数的标准用法之一:
- 匿名函数本身属于
callable可调用类型,只要是合法的可调用表达式,后面紧跟调用括号()就可以直接执行,不需要提前赋值给变量。 - 示例1直接在调用括号里传入实参
786、333、$mysqli,和匿名函数定义的三个形参一一对应,不需要提前在父作用域定义同名变量,也不需要使用use关键字导入变量,参数直接进入匿名函数的独立作用域使用,完全符合语法规则。
三个示例的差异
- 示例1:调用时直接传入所有需要的参数,适合不需要复用父作用域变量的场景,写法更简洁,作用域隔离更彻底。
- 示例2:你贴出的示例2其实属于错误写法,匿名函数定义了两个必填形参,但调用时没有传入对应实参,运行时会抛出
ArgumentCountError参数缺失错误。 - 示例3:通过
use关键字导入父作用域的已有变量,适合需要复用父作用域已定义变量的场景。
官方依据说明
PHP官方文档中对匿名函数的定义明确说明,匿名函数是实现了Closure类的可调用对象,所有可调用表达式都支持直接加()执行,这种写法从PHP 5.3版本引入匿名函数起就支持,7.0之后进一步完善了表达式调用的兼容性,在所有支持匿名函数的PHP版本中都可以正常使用。
内容的提问来源于stack exchange,提问作者user31782
相关产品推荐
相关产品推荐

