php对象:对象传入函数问题?
<?phpclassperson{public$name;function__construct($name){$this->name=$name;}function__...
<?php
class person{
public $name;
function __construct($name){
$this->name=$name;
}
function __destruct(){
echo $this->name.'被释放<br />';
}
}
function test($p1){
$p1=new person('2');
}
$p1=new person('1');
echo $p1->name.'<br />';
test($p1);
echo $p1->name.'<br />';
?>
既然传递对象的时候传递的是地址,那为什么$p1没有被改变? 展开
class person{
public $name;
function __construct($name){
$this->name=$name;
}
function __destruct(){
echo $this->name.'被释放<br />';
}
}
function test($p1){
$p1=new person('2');
}
$p1=new person('1');
echo $p1->name.'<br />';
test($p1);
echo $p1->name.'<br />';
?>
既然传递对象的时候传递的是地址,那为什么$p1没有被改变? 展开
2个回答
展开全部
函数在调用的时候,参数会被重新开辟内存空间的。
也就是说:
你传值穿的是$p1,但在函数test运行的时候会另开辟一个空间,复制一遍$p1,之后再函数中操作的内存都是这个函数新开辟的空间。在这个函数test消亡的时候,这个空间被释放。
所以说你这个根本就没有修改了$p1的值,只是复制了一遍,然后改了,然后删了。
如楼上说的,如果你在参数前面加上"&"符号,这个叫引用。则在参数运行的时候不会另外的开辟内存空间,而是用你的参数的内存空间。
对于函数你可以看看c或者c++语言的函数部分,他们是一样的。给你个例子:
<?php
function swap(&$a,$b){//$a$b叫形参,只是在表示第一个参数第二个参数
$a=20;
$b=10;
}
$x=10;
$y=20;
swap($x,$y);//swap中第一个参数是带引用的,被改变了值,第二个参数没有引用,并不会改变参数的值
echo "x=".$x." y=".$y;//结果 x=20 y=20
?>
也就是说:
你传值穿的是$p1,但在函数test运行的时候会另开辟一个空间,复制一遍$p1,之后再函数中操作的内存都是这个函数新开辟的空间。在这个函数test消亡的时候,这个空间被释放。
所以说你这个根本就没有修改了$p1的值,只是复制了一遍,然后改了,然后删了。
如楼上说的,如果你在参数前面加上"&"符号,这个叫引用。则在参数运行的时候不会另外的开辟内存空间,而是用你的参数的内存空间。
对于函数你可以看看c或者c++语言的函数部分,他们是一样的。给你个例子:
<?php
function swap(&$a,$b){//$a$b叫形参,只是在表示第一个参数第二个参数
$a=20;
$b=10;
}
$x=10;
$y=20;
swap($x,$y);//swap中第一个参数是带引用的,被改变了值,第二个参数没有引用,并不会改变参数的值
echo "x=".$x." y=".$y;//结果 x=20 y=20
?>
追问
name=$name;
}
function __destruct(){
echo $this->name.'被释放';
}
}
function test($p1){
$p1->name='3';
}
$p1=new person('1');
echo $p1->name.'';
test($p1);
echo $p1->name.'';
?>
那为什么改为$p1->name='3';这句又能够执行呢?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询