php中值传递和引用传递

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





猜你喜欢

转载自blog.csdn.net/u013252047/article/details/79094242