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,发生了改变,也就是说对象类型传递时,是按引用传递。