php中变量默认是传值赋值,既当将一个表达式的值赋予一个标量时,整个原始表达式的值被赋值到目标变量。这意味着,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影像另外一个变量。
php也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单引用(“指向” 原变量地址)了原始变量。改动新的变量将影像到原始变量,反之亦然。使用引用赋值,简单将一&符号加到将要赋值的变量前。
对象默认是传引用。
对于较大的数据,传引用比较好,这样会节省内存的开销。
变量的作用域(scope):函数内的变量只能用在定义它的函数内。
例如:
function doublevalue($var){
$temp = $var * 2;
}
$variable = 3;
doublevalue($variable);
echo "\$variable is :$variable";
//$variable is :
echo "\$temp is :$temp";
/*
* Notice: Undefined variable: temp
* $temp is :
*/
因为函数doublevalue()没有返回值,所以
variable的值依然是3,而
temp在函数内,所以函数外不存在该变量
若想在脚本其他地方引用函数变量,最简单的方法就是return 返回结果, 调用的脚本可以仅给局部变量(local variable)赋予返回值。
function doublevalue($var){
$temp = $var * 2;
return $temp;
}
$variable = 3;
$temp = doublevalue($variable);
echo "\$temp is :$temp";
//$temp is :6
在函数内部同样可以使用变量名称 temp.但是,函数内部的 temp跟函数外部的$temp是不一样的。一般的规则:仅在函数内部使用的变量就生存在函数内部,函数外部是否有同名变量对它毫无影响。
但一下三种情况例外:
1、由引用(reference)传递的变量;
2、在函数中被定义为全局变量(global variable)的变量
3、PHP在运行时自动生成的superglobal(也有人称为auto-global、自动全局变量),
负责存储用户及环境值。
若想获取函数内的内容,除了使用return语句返回值,也可使用引用传参。
引用(reference)某个将作为参数的变量,也是返回运算结果或使用全局变量的方法之一。既,若在函数内部改变了某个变量的值将影响原始变量。
function doublevalue1(&$var1){
$var1 = $var1 * 2;
}
$variable1 = 3;
doublevalue1($variable1);
echo "\$variable1 is : $variable1";
//$variable1 is : 6