php-引用变量的定义和原理

<?php
//php引用变量:不同变量名指向同一地址。
//定义一个变量a,此时内存开辟了一块区域,$a指向该区域。
$a = 100;
var_dump($a);    //int 100
//定义变量b,将a变量的值赋值给b,此时该区域有两个变量($a和$b)指向。
$b = $a;
var_dump($b);    //int 100
//修改$a变量的值,php变量具有Copy On Write的特性,所以会复制并重写a所指向的区域值,此时a和b分别指向不同区域。
$a = 10;
var_dump($a);    //int 10
var_dump($b);    //int 100

//------------------------------------------------------------------

$c = 100;
$d = &$c;
$c = 10;
var_dump($c);    //int 10
var_dump($d);    //int 10
//当引用指向时,php变量不在具有COW特性,且指向同一内存区域。

//* unset()只能消除变量的引用,不能删除其内存分配的空间

//------------------------------------------------------------------

/*
例题:
    写出如下程序的输出结果:
    <?php
    $data = [‘a‘,‘b‘,‘c‘];
    foreach($data as $key=>$val){
        $val = &$data[$key];
    }
    问:最终$data的值是多少?
 */
    $data = [‘a‘,‘b‘,‘c‘];
    foreach($data as $key=>$val){
        $val = &$data[$key];
        print_r($data);
    }

/*
    1.$key = 0,
      $val = ‘a‘,
      $val = &$d[0] =>‘a‘
      $data = [‘a‘,‘b‘,‘c‘];

    2.$key = 1,
      $val = ‘b‘, =>$d[0]
      $val = &$d[1] =>‘b‘
      $data = [‘b‘,‘b‘,‘c‘];

    1.$key = 2,
      $val = ‘c‘, =>$d[1]
      $val = &$d[2]=>‘c‘
      $data = [‘b‘,‘c‘,‘c‘];
 */
时间: 2024-12-18 18:02:54

php-引用变量的定义和原理的相关文章

Atitit.变量的定义&#160;获取&#160;储存&#160;物理结构&#160;基本类型简化&#160;隐式转换&#160;类型推导&#160;与底层原理&#160;attilaxDSL

Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL 1.1. $ 美元字符, php 黑头1 1.2. 默认变量的范围和声明:1 1.3. 变量的存储,储存在变量池里Map(varName,varVal)1 1.3.1. 复合变量1 1.4. 变量类型简化: 字符串 数字,  bool1 1.5. 变量自动隐式转换2 1.6. 类型推导2 2. 参考 复合变量2 1.1. $ 美元字符, php 黑头 1.2. 默认变量的范围和声明

shell中变量被定义为星号(*)后无法引用的问题

在编写shell脚本的过程中,有的时候难免会用到一些变量值被定义为(*)的变量,但是当我们试图引用这个变量的时候bash有默认会把(*)替换成当前目录下的所有文件名的列表,如下: [[email protected]_102 ~]# a=* [[email protected]_102 ~]# echo $a anaconda-ks.cfg install.log install.log.syslog [[email protected]_102 ~]# ls  anaconda-ks.cfg 

dos中定义变量与获取常见的引用变量以及四则运算(set用法)

在dos中使用set定义变量: set  a=8              (注意等号两边没有空格) 引用变量如: echo  %a%        将打印a的值 (%a%是获取变量a的值) dos中要使用算术运算,需要使用 set 命令: set  /a  val=3*4     将打印12     (注意等号两边没有空格) 例子 @echo off set b=8888 rem 下一条语句定义了dos中的算术运算 set /a val = 3*2 for /l %%i in (1,1,%va

JAVA 变量的定义和使用【引用变量的特殊性】

Java中主要有2类主变量: 基本数据类型:byte.short.int.long 和 float.double:或者叫主数据类型 和 引用数据类型:数组.类.接口:引用变量只会保存引用,而不是保存对象本身: 引用传递就是一段内存的使用权,一块内存可以供多人使用: 因为,Java中[数组是对象],不管里面存放的是主数据类型还是对象引用,但是可以声明出可以装在主数据类型数值的数组, 数组对象可以有主数据类型的元素,但是数组本身绝对不是主数据类型??????? 所以,Java中数组的使用,必须经过“

那些年我们一起追过的的&quot;引用变量&quot;--总结1

hello ,好久没来了. 今天我来总结一下有关引用变量的注意事项,一是加深一下自己的理解,二是对这块不太理解的同学可以看看. 大神可飘过,有什么不对或不足的地方请多多指教,谢谢. 假设场景: 有一个统计游戏玩家信息调查问卷系统,玩家填写了调查问卷,会给玩家一些奖励,当然目前这不是我们关注的部分. 我们需要记录一下玩家的姓名,年龄,邮箱,以及玩家曾经玩过的游戏有哪些. 既然要记录玩家玩过的游戏,必然要有Game类: package indi.bruce.summary; public class

php引用变量

php引用变量的概念和定义方式 概念:在php中引用意味着不同的名字访问同一个变量内容. 定义方式:使用&符号 工作原理: <?php header("content-type:text/html;charset=utf-8"); //定义一个变量a $a = range(0,100); var_dump(memory_get_usage());//查看内存使用情况 echo "</br>"; //定义变量b,将a变量的值赋值给b,遵循写时

php基础分享(第一篇 PHP引用变量)

首先我们要明白什么是引用变量概念 : 在php中引用意味着用不同的名字访问同一个变量内容:定义方式:使用&符号: php引用的工作原理<?php 定义一个变量 $arr = range(0,1000); //创建一个0到1000的数组 思考问题 $arr 变量在内存中是如何体现的呢? $arr 会在内存当中开辟一块空间来存放 定义一个变量 $array 将$arr赋值给$array $array = $arr; 思考一个问题 $array 会在内存当中创建一个新的空间吗? 其实是不会的因为p

全面解读php面试-引用变量(&amp;)

本文讲述引用传值的核心原理,看完即可扫清一切和引用传值相关的内容,不会了记得画图. 一.memory_get_usage的使用 传值赋值 // 定义一个变量 $a = range(0, 10000); //memory_get_usage() 可以查看PHP内存使用量 var_dump(memory_get_usage()); // int(989778) // 定义变量b,将a变量的值赋值给b $b = $a; var_dump(memory_get_usage()); // int(9897

实习第二天-对象-对象引用-引用变量-精-精-精-下雨天

class Person{ } Person是一个数据类型-引用类型 数据类型-变量名   Person a;  声明一个引用类型的变量a,然后在栈中给引用变量a分配了内存空间 初学Java时,在很长一段时间里,总觉得基本概念很模糊.后来才知道,在许多Java书中,把对象和对象的引用混为一谈.可是,如果我分不清对象与对象引用, 那实在没法很好地理解下面的面向对象技术.把自己的一点认识写下来,或许能让初学Java的朋友们少走一点弯路. 为便于说明,我们先定义一个简单的类: class Vehicl