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. 基本类型存放在栈区,访问 ...
随机推荐
- 合肥.NET技术社区首次线下聚会全程回顾【多图】
2019年3月16日对于合肥.NET来说是一个特别的日子,因为这是合肥.NET技术社区首次非正式线下聚会!这次聚会受场地限制(毕竟是聚餐的形式),即使换成了小椅子后,最多也只能容纳24个人,所以还有一 ...
- 大名鼎鼎的Requests库用了什么编码风格?
原文:https://www.kennethreitz.org/essays/kenneth-reitzs-code-style 作者:Kenneth Reitz 原题:Kenneth Reitz’s ...
- 进阶!基于CentOS7系统使用cobbler实现单台服务器批量自动化安装不同版本系统(week3_day5_part2)-技术流ken
前言 在上一篇博文<cobbler批量安装系统使用详解-技术流ken>中已经详细讲解了cobbler的使用以及安装,本篇博文将会使用单台cobbler实现自动化批量安装不同版本的操作系统. ...
- HTML中块元素与内联元素的概念
HTML中块元素与内联元素的概念 div就是一个块元素,所谓的块元素就是会独占一行的的元素,无论他的内容有多少,他都会独占一整行. p h1 h2 h3 ... div这个标签没有任何语义,就是一个纯 ...
- 【CSS学习】--- float浮动属性
一.前言 浮动元素以脱离标准流的方式来实现元素的向左或向右浮动,并且浮动元素还是在原来的行上进行浮动的.float浮动属性的四个参数:left:元素向左浮动:right:元素向右浮动:none:默认值 ...
- 我的世界 ParaCraft 结合开源地图 OpenStreetMap 生成3D校园的方法简介
我的世界ParaCraft结合开源地图OpenStreetMap生成3D校园的方法简介 版本1.0 日期2019.2.3 作者Ray (82735589@qq.com) www.TimeGIS.com ...
- 【AO笔记】有关使用AO基于shp文件创建网络数据集的一个细节
前些日子,和群友交流时提及shp文件创建单一网络数据集的创建问题. 由于项目需求,用shp文件创建网络合适,所以不得不去找一些古老的代码资料... 以前的研究中,创建网络数据集是根据IDatasetC ...
- 360浏览器兼容模式下IE内核版本
问题 最近在跟客户演示系统时,自己电脑IE 11下好好的,我们web系统最低支持到IE9.在客户电脑上,IE9浏览器下可以正常浏览,但是360兼容模式下,页面什么也不显示. 通过F12调试工具发现,3 ...
- google zxing android扫描优化&解析
这里先给出zxing包的源码地址 zip包:https://codeload.github.com/zxing/zxing/zip/master Github:https://github.com/z ...
- 逻辑回归&线性支持向量机
代码: # -*- coding: utf-8 -*- """ Created on Tue Jul 17 10:13:20 2018 @author: zhen &qu ...