php中的值传递,当变量值修改后,不会改变原来的值,但是如果采用引用传递,就会改变原来的值。下面举几个例子:
1.字符串类型的
function main(){
$str = "abc";
change($str);
var_dump($str);
}
function change($str){
$str = "def";
}
main();
结果为,abc,没有改变
如果采用值传递
function main(){
$str = "abc";
change($str);
var_dump($str);
}
function change(&$str){
$str = "def";
}
main();
结果为def,改变了
2.数组类型的
function main(){
$arr = array("aaa","bbb");
swap($arr);
var_dump($arr);
}
function swap($str){
$temp = $str[0];
$str[0] = $str[1];
$str[1] = $temp;
}
main();
这样结果是没有变的,还是原来的值,这个有点蒙圈,按理说数组传递的应该是地址,其实不是,传递的还是数值,这个和java中还是不一样的。
改成引用传递后
function main(){
$arr = array("aaa","bbb");
swap($arr);
var_dump($arr);
}
function swap(&$str){
$temp = $str[0];
$str[0] = $str[1];
$str[1] = $temp;
}
main();
结果发生了改变
3.对象类型呢,来看一看
class Car{
public $color = "red";
}
function main(){
$car = new Car();
echo $car->color."<br>";//改变前
change($car);
echo $car->color;//改变后
}
main();
function change($car){
$car->color = "white";
}
结果是red,white,发生了改变,也就是说对象类型传递时,是按引用传递。