‘壹’ php传值赋值和引用赋值的区别
<?php
header("Content-type:text/html;charset=utf-8;");
//简单示例
//传值:值的复制
$a=10;
$b=20;
$a=$b;
$b=$a+9;
echo$a."====".$b;
echo"<br/>";
//20====29
//引用传值:
//说白了就是a,b指向同一内存地址;比如:a变成10,b也会变成10;
//b变成20,a也会变成20;
$a=10;
$b=20;
$a=&$b;
$b=$a+9;
echo$a."====".$b;
echo"<br/>";
//128====128
‘贰’ php中传值与传引用的区别
传值要重新构造一份原参数的拷贝
传引用则不需要
传值对参数的修改不会改变原参数
传引用时可以直接修改原参数
至于什么时候传引用,这看你的需要。
如果你的参数对象比较大(占用内存很多),而函数本身不需要修改原对象时,这个时候就推荐传引用,可以省去临时对象的构造开销。
如果你有实际修改原参数的需要,那么就只能传引用了。
‘叁’ 详解PHP变量传值赋值和引用赋值变量销毁
本文实例为大家分享了PHP变量传值赋值和引用赋值变量销毁的具体代码,供大家参考,具体内容如下
<?php
$a
=
100;
$b
=
200;
var_mp($a,$b);
//int(100)
int(200)
?>
php中,上面的代码,变量是怎么存放的呢?
上面的代码变动下,将变量b赋值给变量a,会发生什么?
<?php
$a
=
100;
$b
=
200;
$a
=
$b;/*多了这个*/
var_mp($a,$b);
//int(200)
int(200)
?>
问题来了,$a
=
$b,那么是将变量a的指针指向了变量b指针所指向的位置?还是变量a指向的位置的值变了?
引用赋值和上面传值赋值不同,引用赋值是两个变量指向一个地方,一旦这样,一改俱改。
怎么引用赋值呢?变量名前加&即可,
$a
=
&$b;
这样赋予变量a的就不仅仅是变量b的值,而是变量b的地址,变量a和变量b共同指向一个地址。
<?php
$a
=
100;
$b
=
200;
$a
=
&$b;
var_mp($a,$b);
//int(200)
int(200)
/*变量b引用赋值给变量a后,ab指向同一个地址,将会一改俱改,如下:*/
$a
=500;
var_mp($a,$b);//int(500)
int(500)
一改俱改
$b
=
700;
var_mp($a,$b);//int(700)
int(700)
一改俱改
?>
<?php
/*理解下面的话*/
$a
=
100;
//变量a赋值int
100
,100是基础数据类型,不是变量,是存在变量指向位置的
$a
=
$b;
//变量b的值
赋值
给变量a,变量a,b各有各的指向,执行之后,各是各的。
$a
=
&$b;
//变量b的值的地址
赋值给变量
a
,变量a,b共用一个地址哦!一改俱改!
?>
<?php
/*
php中unset()是用来销毁变量的,但很多时候,unset()只把变量给销毁了,
内存中存放的该变量的值仍然没有销毁,也就是没能达到我们想要的释放内存的效果。
这里可以用
变量=null
的方法来释放其内存
unset也会释放内存的情况
1.
在变量值所占空间超过255字节长的时候,unset(变量)才会释放内存
2.
只有当指向该值的所有变量都被销毁后,地址才会被释放(比如$a,$b都指向该值,仅仅unset($a);是不释放的,$b还是正常存在的)(也要执行1的判断)
*/
$a
=
200;
$b
=
&$a;
unset($a);
var_mp($a,$b);
//NULL
int(100)
?>
上面的代码,执行到unset($a)时候,就是将变量a的指向断开,同时将变量a扔出花名册,从下图可以看出,对变量b是没有影响的。
但是,如果用$a
=
null;这种方式销毁变量时,将会有如下影响:
<?php
$a
=
100;
$b
=
&$a;
$a
=
null;
var_mp($a,$b);
//NULL
NULL
?>
这种方式,释放了内存,但是共用一个地址的另一个变量也受到了影响。
看看这两种方式在数组上的应用:
<?php
$aaa
=
array(
'a'=>1,
'b'=>2
);
unset($aaa['a']);
print_r($aaa);
//Array
(
[b]
=>
2
)
,用unset,数组中这一项不存在了
$bbb
=
array(
'a'=>1,
'b'=>2
);
$bbb['a']
=
null;
print_r($bbb);
//Array
(
[a]
=>
[b]
=>
2
)
,用
=
null,数组中这一项还存在,只是为空了
?>
以上所述是小编给大家介绍的PHP变量传值赋值和引用赋值变量销毁详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
您可能感兴趣的文章:PHP生成短网址的思路以及实现方法的详解PHP错误提示It
is
not
safe
to
rely
on
the
system……的解决方法PHP随机数函数rand()与mt_rand()的讲解php微信扫码支付
php公众号支付PHP实现支持CURL字符串证书传输的方法PHP使用OB缓存实现静态化功能示例PHP使用mysqli同时执行多条sql查询语句的实例PHP中命名空间的使用例子PHP
SESSION机制的理解与实例PHP自动载入类文件函数__autoload的使用方法
‘肆’ php语言中传值赋值和引用赋值的区别笔记
//传值赋值和引用赋值区别
/*传值赋值:
a.变量表:放变量名 指向它们各自的位置(盒子)
b.位置(盒子):存放值和类型*/
$a1 = 234;
$a2 = 34556;
$a1 = $a2;
var_mp($a1,$a2);
$a2 = 'nongjiale.fun';
var_mp($a1,$a2);
/*引用赋值:使用&取地址
a.变量名同时指向同一个位置(盒子)
b.把y1的地址赋值给y2*/
$y1 = 23;
$y2 = 433;
var_mp($y1,$y2);//输出int 23 int 433
$y2 = &$y1;
$y2 = 'mudidi.tech';
var_mp($y1,$y2);//输出string 'mudidi.tech' string 'mudidi.tech'
‘伍’ 请说明php中传值与传引用的区别.什么时候传值什么
传值,
是把实参的值赋值给行参
那么对行参的修改,不会影响实参的值
传引用
真正的以地址的方式传递参数
传递以后,行参和实参都是同一个对象,只是他们名字不同而已
对行参的修改将影响实参的值
所谓值传递,就是说仅将对象的值传递给目标对象,就相当于;系统将为目标对象重新开辟一个完全相同的内存空间。
所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。
‘陆’ PHP中传值与传引用的区别 请举一个例子说明。
传值的话,如果是非对象,会传一个值的拷贝,对这个变量做任何改动都不影响原值。
传引用或者传对象,是传真实的内存地址,对这个变量做的改动会影响原值。
function func1($a) {
$a = $a + 1;
}
function func2(&$a) {
$a = $a + 1;
}
$sample = 1;
func1($sample);
echo $sample; // 输出 1
$sample = 1;
func2($sample);
echo $sample; // 输出 2
‘柒’ PHP对象到底是值传递还是引用传递
对象在函数中是引用传递
即使赋值给其它变量,也是引用
但是改变了$a的类型,准确的说是zval.value指针都变化了,所以此时产生了分裂。
所以:
尽量避免函数内操作外部对象,否则有可能造成致命性的逻辑错误,特别是改变对象数据的时候。
或者在做对象数据传递的时候要注意数据的严谨性。
‘捌’ PHP 中传值与传引用有什么区别
很大区别
传值 就相当于复制一份 从新开辟一个内存存储区域,这时候就是2个独立区域了.对每个区域改变另外一个区域不受影响.
传址(传引)就相当于多了一个入口,内存存储区域不变.你对其中入口改变.都会改变其共同的内存空间内容
传值比如:你(张三)是个个体,把你克隆出另外一个出来叫李四.
这时候我打李四,并没有打张三,打张三,并没打李四.是相互独立的
传引:就是你有一个身份证 叫张三,再去办一个身份证叫李四,你就有2个身份证了,张三李四都带标你.假如我KO了你.然后去派出所调解 你拿出张三.身份证那么我打的就是张三,你拿出的是李四身份证我打的就是李四
‘玖’ 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);
?>
‘拾’ 谁能给我讲讲php中的值传递和引用传递是怎么回事,还有就是方法中带参数有什么用
值传递就是讲某个值直接赋给某一个变量,如$a="wetrt"; 而引用传递通俗来讲就是获取变量的存储地址,有了这个地址我就可以随便更改变量的中的值了。例如:$b="旧值";function a(&$b){ $b="新的值";} 这样的话你原来$b的值就被改为“新值”了,方法中带参数肯定是用来向方法中传递某个信息了或者说你相对这个参数进行某些操作,比如function a($b){ echo $b;}试想你没有这个参数变量$b,你怎么办?你总不可能上来直接就是function a(){ echo $b;}吧