下面例子:
$age = 10; function grow($age) { $age += 1; return $age; } echo grow(&$age),'<br />'; // 11 echo $age,'<br />'; // 11
在上例中,调用函数后,全局变量也受到了影响.
因为我们做"引用传参",这种方式,违背"封装"的概念,影响代码的整洁.
因此,不推荐这么做.
在PHP5.3,php.ini中,有一个选项,如下
allow_call_time_pass_reference = Off
如果为off,则函数引用传参时,会报Warning: Call-time pass-by-reference has been deprecated如果为on,则不报warning
而在PHP5.4中,彻底废除了函数引用传参,使用函数引用传参时,
报Fatal error: Call-time pass-by-reference has been removed
解决办法:
1:allow_call_time_pass_reference = On 但这不是根本解决办法,如果移植5.4,还是不行.
2:修改自己的代码,不要函数引用传参.
函数:
// 递归转义数组 function _addslashes($arr) { foreach($arr as $k=>$v) { if(is_string($v)) { $arr[$k] = addslashes($v); } else if(is_array($v)) { // 再加判断,如果是数组,调用自身,再转 $arr[$k] = _addslashes($v); } } return $arr; }