## 闭包
闭包声明时,关键词function后以及关键词use的前后都**必须**要有一个空格。
开始花括号**必须**写在声明的同一行,结束花括号**必须**紧跟主体结束的下一行。
参数列表和变量列表的左括号后以及右括号前,**必须不能**有空格。
参数和变量列表中,逗号前**必须不能**有空格,而逗号后**必须**要有空格。
闭包中有默认值的参数**必须**放到列表的后面。
标准的闭包声明语句如下所示,注意其 括号、逗号、空格以及花括号的位置。
~~~
<?php
$closureWithArgs = function ($arg1, $arg2) {
// body
};
$closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
// body
};
~~~
参数列表以及变量列表**可以**分成多行,这样,包括第一个在内的每个参数或变量都**必须**单独成行,而列表的右括号与闭包的开始花括号**必须**放在同一行。
以下几个例子,包含了参数和变量列表被分成多行的多情况。
~~~
<?php
$longArgs_noVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument
) {
// body
};
$noArgs_longVars = function () use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
$longArgs_longVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument
) use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
$longArgs_shortVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument
) use ($var1) {
// body
};
$shortArgs_longVars = function ($arg) use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
~~~
注意,闭包被直接用作函数或方法调用的参数时,以上规则仍然适用。
~~~
<?php
$foo->bar(
$arg1,
function ($arg2) use ($var1) {
// body
},
$arg3
);
~~~
- 1. 概览
- 1.1. 例子
- 2. 通则
- 2.1 基本编码准则
- 2.2 文件
- 2.3. 行
- 2.4. 缩进
- 2.5. 关键字 以及 True/False/Null
- 3. namespace 以及 use 声明
- 4. 类、属性和方法
- 4.1. 扩展与继承
- 4.2. 属性
- 4.3. 方法
- 4.4. 方法的参数
- 4.5.abstract、final、 以及static
- 4.6. 方法及函数调用
- 5. 控制结构
- 5.1.if、elseif和else
- 5.2.switch和case
- 5.3.while和do while
- 5.4.for
- 5.5.foreach
- 5.6.try,catch
- 6. 闭包
- 7. 总结