PHP变量传值赋值和引用赋值,变量销毁
$a = 100;
$b = 200;
php中,上面代码中变量是怎么存放的呢?

此时若将b赋值给a,即
传值赋值 $a = $b; 和 引用赋值$a = &$b; 有什么区别呢?

传值赋值就是复制过去,然后各玩各的,互不影响。
引用赋值是两个变量指向一个盒子,一旦这样,一改俱改。
这样赋予变量a的就不仅仅是变量b的值,而是变量b的地址,变量a和变量b共同指向一个地址。
$a = 100;
$b = 200; $a = &$b; //变量a的指针指向变量b的数据盒子
var_dump($a,$b); //int(200) int(200) /*变量b引用赋值给变量a后,ab指向同一个地址,将会一改俱改,如下:*/
$a =500;
var_dump($a,$b); //int(500) int(500) 一改俱改: 改a也改了b
$b = 700;
var_dump($a,$b); //int(700) int(700) 一改俱改: 改b也改了a $c = 900;
$a = $c;
var_dump($a,$b); //int(900) int(900) 一改俱改:其他变量值复制给a,等同于直接改了盒子里的数据 $d = 1111;
$a = &$d;
var_dump($a,$b); //int(1111) int(900) 这里没有一改俱改,$a = &$d;是把变量d引用赋值给变量a,变量a指向了新地址,变成了新值1111,变量b还是指向老地址不变。
<?php
/*理解下面的话*/ $a = 100;
//变量a赋值int 100 ,100是基础数据类型,不是变量,新建一个盒子,里面存放int 100,让a指向它 $a = $b;
//变量b的值 赋值 给变量a,变量a,b各有各的指向,执行之后,各是各的。 $a = &$b;
//变量b的值的地址 赋值给变量 a ,变量a,b共用一个地址哦!一改俱改! ?>
销毁变量用unset
在php中,变量占据了两个地方,1.花名册中占个名字 2.存储其值的“盒子”(其实就是内存中一块地方)。
unset($a) ;会发生什么?
首先,会将$a这个变量扔出花名册,于是没有这个变量了。
其次,检查有没有其他变量也指向这个“盒子”,如果没有其他变量指向这个“盒子”,再检查盒子所占空间超过255字节长没?超过了,盒子才会被销毁(释放内存)没超过255字节,则不释放内存(销毁盒子)。
要想释放内存,可以用
$a = null;的方式,这样盒子被销毁了,但是中花名册中还有该变量哦!
/*引用赋值一改俱改,但是unset不是改盒子里的值,所以unset变量a,变量b没变化*/
$a = 200;
$b = &$a;
unset($a);
var_dump($a,$b); //NULL int(100)
上面的代码,执行到unset($a)时候,就是将变量a的指向断开,同时将变量a扔出花名册,从下图可以看出,对变量b是没有影响的。

但是,如果用$a = null;这种方式销毁变量时,将会有如下影响:
<?php
$a = 100;
$b = &$a;
$a = null;
var_dump($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变量传值赋值和引用赋值,变量销毁的更多相关文章
- swift直接赋值与引用赋值都会触发willSet
class baseGoo{ var isScannerRunning = false { willSet{ print(newValue) } } var desp:String = "& ...
- PHP变量引用赋值与变量赋值变量的区别
变量默认总是传值赋值.那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量.这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量 ...
- 细说PHP-5.3.4变量的引用赋值
变量总是传值赋值.也就是说,当讲一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量.这意味着,当一个变量的值赋予另个一变量时,改变其中一个变量的值,将不会影响到另一个变量.PHP中提供了 ...
- Golang对方法接收者变量的自动“取引用”和“解引用”
原文:https://blog.csdn.net/u014633283/article/details/83826413 --------------------------------------- ...
- 关于php变量的赋值和引用的区别
刚开始学习php,发现有些地方和js语法不同,所以记录下来. 这篇文章是总结php中变量赋值和引用的区别. 我们知道,js中,原始类型的赋值,是将值直接复制给变量:引用类型的赋值,是将内存地址复制给变 ...
- PHP:第一章——php中的变量001 /普通赋值/引用赋值/php变量的检查与销毁
<?php //php中的变量: //php中的变量用一个美元符$后面紧跟着变量名来表示,变量名是区分大小写的. //有效的变量只能是字母或者下划线开头,后面跟任意数量的字母.数字.或者下划线. ...
- Linux Shell编程变量赋值和引用
我们可以使用任意一种文字编辑器,比如gedit.kedit.emacs.vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行): #!/bin/sh ... 注意:最好使用“! ...
- Linux —— Shell编程之变量赋值和引用
Linux的shell编程是一种非常成熟的编程语言,它支持各种类型的变量.有三种主要的变量类型:环境变量.内部变量和用户变量. 环境变量(environment variable)是系统环境的一部分, ...
- Js的引用赋值与传值赋值
要说js的赋值方式时首先要说明js的数值类型:基本类型和引用类型. 1.基本类型 基本的数据类型有:undefined,boolean,number,string,null. 基本类型存放在栈区,访问 ...
随机推荐
- mysql的学习笔记(四)
---恢复内容开始--- 1.插入操作 INSERT (1)INSERT table_name(col_name,...) VALUES(...),(....) CREATE TABLE user( ...
- ConfirmCancelBottomSheetDialog【确认取消底部对话框】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 继承BottomSheetDialog,实现简单的确认取消对话框样式. 效果图 代码分析 ConfirmCancelBottomSh ...
- 美团分布式服务通信框架及服务治理系统OCTO
一.什么是OCTO 定义: OCTO是美团的分布式服务通信框架及服务治理系统,属于公司级基础设施,目前尚未开源. 目标: 为公司所有业务提供统一的服务通信框架,使业务具备良好的服务运营能力,轻松实现 ...
- JavaScript夯实基础系列(五):类
JavaScript中没有类,是通过使用构造函数和原型模式的组合来实现类似其它面向对象编程语言中"类"的功能.ES6引入的关键字class,形式上向其它面向对象编程语言靠拢,其 ...
- [深度应用]·实战掌握PyTorch图片分类简明教程
[深度应用]·实战掌握PyTorch图片分类简明教程 个人网站--> http://www.yansongsong.cn/ 项目GitHub地址--> https://github.com ...
- SpringBoot + Spring Security 学习笔记(二)安全认证流程源码详解
用户认证流程 UsernamePasswordAuthenticationFilter 我们直接来看UsernamePasswordAuthenticationFilter类, public clas ...
- Golang: Cobra命令行参数库的使用
将cobra下载到 $GOPATH,用命令: go get -v github.com/spf13/cobra/cobra 然后使用 go install github.com/spf13/cobra ...
- 如何快速高效简洁的打开软件 干净利索的windows快捷程序启动器
本文的主题是如何高效快捷的打开你想要打开的软件 本文介绍的应该是最简洁的一种方式,借助于windows内部的path进行设置 也可以认为是一种形式的windows应用启动器程序---win+R快速打开 ...
- .NET运行时中的监测和可观测性
今年5月份的时候研究分布式追踪的问题知道了的拦截方式比较零散, 刚好8月份的时候看到这篇文章,这个文章总结的比较完整.存档了很久,趁今天有空翻译给大家.原文地址,校验:张蘅水 .NET是一个托管运行时 ...
- ABAP案例:灵活读取SAP各表的数据
案例说明 RFC读取表中数据. Import 参数名称 Type spec. 参考打印 FIELDS_NAME1 TYPE CHAR25 TABLE_NAME1 TYPE CHAR25 WHE ...