我正在尝试识别PHP代码中的纯函数。
纯函数是关于函数的这两个语句都成立的函数:
- 给定相同的参数值,函数总是计算相同的结果值。函数结果值不能依赖于任何隐藏的信息或状态,这些信息或状态可能随着程序执行的进行或在程序的不同执行之间发生变化,也不能依赖于来自I/O设备的任何外部输入
- 对结果的评估不会导致任何语义上可观察到的副作用或输出,例如可变对象的突变或I/O设备的输出
(定义来自维基百科)
说PHP函数是纯当且仅当
- 它的所有参数都是按值传递的(参数列表中没有
&
) - 它不使用对象成员(函数体中没有
$this
) - 它不使用全局变量(函数体中不包含
global
) - 它不使用超全局变量(不包含
$_
变量)
这些说法是真的吗?我是否遗漏了任何用例?
您缺少了很多用例
rand()
- 数据库交互
- 文件IO
static
变量- 使用
global
调用其他函数 - 函数内部的
import
/require
语句 - 具有内部状态的函数,如
ob_get_contents()
- 可变数组指针
可能有很多事情我没有想到。PHP的设计非常有状态。