下面例子:
$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;
}