php跟.net一样分为:值类型和引用类型两种。
值类型传递时候是按值传递,引用类型则是按引用传递。
值类型一般就是直接定义的数据,如:$user,$id这样直接定义的。
引用类型则是通过new 实例化的对象,如:$user = new user();
在函数调用中如果传递的参数为值类型,改变原来数据的值是不会改变的,例如:
<? php function increment( $tmp ){ $tmp = $tmp + 1 ;} $i = 4 ;increment( $i ) print $i ; ?>
输出结果:4
如果你想改变值类型的值,可以使用&符号,它的用法跟.net的ref 和out关键字。
<? php function increment( & $tmp ){ $tmp = $tmp + 1 ;} $i = 4 ;increment( $i ) print $i ; ?>
输出结果:5。
而按引用类型传递参数时,传递的是对象的指针,在函数中改变的是参数的本身的值,所以不需要使用&符号
Code <?phpclass person{ public $name; public $age;}function increment($obj){ $obj->age = $obj->age +1;}$p = new person();$p->name = "coolkiss";$p->age = 22;increment($p);print $p->age;?>
输出结果:23
这里传进去的是一个person的对象$p,这跟上面的值传递不同,上面值传递是传进$i的一个副本
这里如果把$p->age传进去的话也是值传递,同样无法改变age的值。
函数前面加的&的用法还不是很懂,希望高手指点一二。。谢谢。。