• 欢迎来到本博客,希望可以y一起学习与分享

引用传值,改变全局变量的值

PHP benz 4年前 (2017-04-25) 126次浏览 0个评论 扫描二维码

没有使用引用传值:

<?php

$age=10;

function grow($age){

$age+=1;
return $age;

}
echo grow($age).'<br/>’;  //输出  11

echo $age;  //输出 10  (说明全局变量$age没有被方法所改变)
?>

 

使用了 引用传值:

<?php

$age=10;

function grow(&$age){

$age+=1;
return $age;

}
echo grow($age).'<br/>’;  //输出  11

echo $age;  //输出 11  (说明全局变量$age的值被改变了)
?>

使用了引用传值,函数内部的$age 和 全局$age 指向的是同一个变量地址,因此,内部$age的变化也影响了外部的变量$age。

但是,这种写法违反了封装性。函数运行后,应该是对外部环境没有“副作用”的,即不改变外部变量的值。

如果确实想要改变外部变量的值,可以这样:

$age=grow($age);

在PHP 5.4 及以上的版本,使用引用传值会报错  Warning: Call-time pass-by-reference has been deprecated,是因为移除了引用传值的功能。这样就需要到 php.ini 文件中,找到  allow_call_time_pass_reference  这个选项,把他改为  on(即开启 引用传值)。

但是不推荐修改 php.ini 配置文件去使用引用传值,也不推荐使用引用传值,因为引用传参归根结底就是不够规范。

那么,不使用引用传值,则需要自己写方法来递归转义数组。


文章 引用传值,改变全局变量的值 转载需要注明出处
喜欢 (0)

您必须 登录 才能发表评论!