foreach ($data as &$item) 循环引用产生的问题
Version
PHP version 7.4
问题呈现
最小化分析代码:
1 | $data = ['foo', 'bar']; |
输出结果:
1 | Array |
我们可以发现,$data的值莫名奇妙变了,而它只是经过了两个空循环而已,发生了什么?!
先总结一下 PHP 中两条关于引用的两个规则:
- 给引用变量赋值,实际上是给引用所指向的变量赋值
- 一个引用变量可以被修改为对另外一个变量的引用
下面我来一行行代码分析产生这个问题的原因:
1 | $data = ['foo', 'bar']; |
如何避免这个问题1:
1 | foreach ($data as &$item) { |
如何避免这个问题2:
不使用引用