PHP中的函数编程
PHP支持第一类函数,这意味着可以将函数赋值给变量。用户定义的函数和内置函数都可以由变量引用并动态调用。函数可以作为参数传递给其他函数,函数可以返回其他函数(称为高阶函数的函数)。
语言支持递归(一种允许函数调用自身的功能),但大多数PHP代码都集中在迭代上。
自PHP 5.3(2009)以来,已存在匿名函数(支持闭包)。
PHP 5.4增加了将闭包绑定到对象范围的能力,并且还改进了对可调用对象的支持,使得它们几乎在所有情况下都可以与匿名函数互换使用。
高阶函数的最常见用法是在实现策略模式时。内置array_filter()
函数要求输入数组(数据)和用作每个数组项的过滤函数的函数(策略或回调)。
闭包是一个匿名函数,可以访问从外部作用域导入的变量,而无需使用任何全局变量。从理论上讲,闭包是一个函数,在定义时,环境会关闭(例如固定)一些参数。闭包可以以干净的方式解决变量范围限制。
在下一个示例中,我们使用闭包来定义一个函数,该函数array_filter()
从一系列过滤函数中返回单个过滤函数。
系列中的每个滤波器功能仅接受大于某个最小值的元素。返回的单个过滤器
criteria_greater_than
是一个闭包,其$min
参数由作用域中的值关闭(在调用时作为参数给出
criteria_greater_than
)。
默认情况下,使用早期绑定将$min
变量导入到创建的函数中。对于具有后期绑定的真实闭包,应在导入时使用引用。想象一个模板或输入验证库,其中定义闭包以捕获范围中的变量,并在以后评估匿名函数时访问它们。