引用传参的错误报告与递归转义

下面例子:

$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;
}
原文地址:https://www.cnblogs.com/lzzhuany/p/4759896.html