A. php中按值传递和引用传递的区别
(1)按值传递:函数范围内对值的任何改变在函数外部都会被忽略
(2)按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
(3)优缺点:
A:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。
B.按引用传递则不需要复制值,对于性能提高很有好处。
<?php
header('content-type:text/html;charset=utf-8');
//探讨一下array,null,对象,资源的默认传递方式
//结论(1)array默认是值传递,通过加&可以引用传递
//(2)null默认是值传递,通过加&可以引用传递
//(3)资源是值传递.通过加&可以引用传递
//(4)对象默认也是值传递,但是对象值传递是对象标识符
$hero=array('no1'=>'蝙蝠侠','no2'=>'超人');
$hero2=&$hero;
$hero2['no1']='蜘蛛侠';
echo'<pre>';
var_mp($hero);
var_mp($hero2);
$a=null;
$b=&$a;
$b='abc';
var_mp($a,$b);
?>
B. PHP如何通过传引用的思想实现无限分类(代码
在我的Simpla中,用到了无限分类,使用了PHP的传引用思想实现无限分类的方法,可以完美展示类似这样的分类模式。
id pid name
1 0 四川
2 0 重庆
3 1 成都
4
1 绵阳
5 3 高新区
代码如下所示:
/**
* 数组变成无限级分类--传引用思想
* @param array $items
* @return array
*/
public static function get_tree($orig) {
//解决下标不是1开始的问题
$items = array();
foreach ($orig as $key => $value) {
$items[$value[‘id‘]] = $value;
}
//开始组装
$tree = array();
foreach ($items as $key => $item) {
if ($item[‘pid‘] == 0) { //为0,则为1级分类
$tree[] = &$items[$key];
} else {
if (isset($items[$item[‘pid‘]])) { //存在值则为二级分类
$items[$item[‘pid‘]][‘child‘][] = &$items[$key]; //传引用直接赋值与改变
} else { //至少三级分类
//由于是传引用思想,这里将不会有值
$tree[] = &$items[$key];
}
}
}
return $tree;
}
以上内容很简单吧,如有错误或者更好的方法,希望可以相互交流。谢谢。!
C. php语言中&的原理(有代码)
&是引用,最终导致的结果是:$c和$a结果是一样的!
D. 谁能给我讲讲php中的值传递和引用传递是怎么回事,还有就是方法中带参数有什么用
值传递就是讲某个值直接赋给某一个变量,如$a="wetrt"; 而引用传递通俗来讲就是获取变量的存储地址,有了这个地址我就可以随便更改变量的中的值了。例如:$b="旧值";function a(&$b){ $b="新的值";} 这样的话你原来$b的值就被改为“新值”了,方法中带参数肯定是用来向方法中传递某个信息了或者说你相对这个参数进行某些操作,比如function a($b){ echo $b;}试想你没有这个参数变量$b,你怎么办?你总不可能上来直接就是function a(){ echo $b;}吧
E. PHP值传递和引用传递的区别
传值要重新构造一份原参数的拷贝
传引用则不需要
传值对参数的修改不会改变原参数
传引用时可以直接修改原参数
至于什么时候传引用,这看你的需要。
如果你的参数对象比较大(占用内存很多),而函数本身不需要修改原对象时,这个时候就推荐传引用,可以省去临时对象的构造开销。
如果你有实际修改原参数的需要,那么就只能传引用了
F. 请说明php中传值与传引用的区别.什么时候传值什么
传值,
是把实参的值赋值给行参
那么对行参的修改,不会影响实参的值
传引用
真正的以地址的方式传递参数
传递以后,行参和实参都是同一个对象,只是他们名字不同而已
对行参的修改将影响实参的值
所谓值传递,就是说仅将对象的值传递给目标对象,就相当于;系统将为目标对象重新开辟一个完全相同的内存空间。
所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。
G. php引用传递中的&什么意思,有什么用
其实图片中的文字已经描述得很详细了,如果你是循序渐进学到这里的,应该是可以理解的啊。
加了&就是引用传递,就是把实参的内存地址传递给函数内部的形参,这样的话函数内部对形参的任何修改都会直接影响到外部的实参,也就是说这种情况下实参和形参其实是同一个变量;
而不加&则是值传递,就是把实参的值传递给函数内部的形参,这时候函数内部对形参的任何修改都与外部的实参没有任何关系,不会改变实参的值。
打个比方,值传递就好比你给某人100块钱,然后他拿这钱去不管怎么花都与你无关了;而引用传递则好比你把自己的银行帐号密码都告诉某人,那么他此后用这账号所做的任何消费行为都与你的总资产息息相关了!
H. 如何理解PHP中的传递赋值与引用赋值
传递赋值,是把你赋值的变量内存地址给函数,在函数里对这个变量做的任何改变都会作用在这个地址上的变量上,函数外使用这个地址的变量也会相应的改变。
引用赋值,相当于给了函数这个变量的副本,在函数内对副本的任何修改都只会改变副本地址上的值,而函数外变量使用的是另外的地址,所以不会改变外面变量。
相当于本体和分身了。。。
I. php引用传递和值传递的区别
引用传值:是对象与对象之间进行匹配,
值传递:是两个变量之间进行
例如:
$a = 5;
$a = $b
echo $b; //这是值传递
引用传递
$a = 5 ;
$b = &$a;
echo $b ;
说白了就是两个堆栈之间的数据传送。
J. PHP中的&传值引用的问题,在foreach循环的结果能帮解释下输出的结果原理是什么
修改了一下,感觉这样你应该能理解的了了。
感觉你在一个误区里面。。
第一次带&的foreach并没有改变数组的内容。。而是最后一次循环$value引用了数组的最后一个项
(可以测试一下,在第一次循环结束后unset($value),第二次循环的结果就不会有变化),
在你第二个foreach也是使用的$value变量,这才造成了怪异的问题(可以换个变量,比如$val,输出的数组就不会有变化)。
第二个foreach是赋值给$value,但是这时的$value是引用的数组的最后一个值,所以,第一次循环把one赋值给了最后一个值,第二次把two赋值给最后一个,第三次也就是最后一个已经在第二次循环被赋值为two,所以仍然是two。