1. 传值:是把实参的值赋值给行参 ,那么对行参的修改,不会影响实参的值
  2. 传引用 :真正的以地址的方式传递参数传递以后,行参和实参都是同一个对象,只是他们名字不同而已对行参的修改将影响实参的值

说明:

  1. 传值:根copy是一样的。打个比方,我有一橦房子,我给你建筑材料,你建了一个根我的房子一模一样的房子,你在你的房子做什么事都不会影响到我,我在我的房子里做什么事也不会影响到你,彼此独立。
  2. 传引用:让我想起了上大学时学习C语言的指针了,感觉差不多。打个比方,我有一橦房子,我给你一把钥匙,我们二个都可以进入这个房子,你在房子做什么都会影响到我。

一,php实例

1,传值

  1. <?php
  2. $param1=1;               //定义变量1
  3. $param2=2;               //定义变量2
  4. $param2 = $param1;       //变量1赋值给变量2
  5. echo $param2;            //显示为1
  6. ?>

2,传引用

  1. <?php
  2. $param2=1;               //定义变量2
  3. $param1 = &$param2;      //将变量2的引用传给变量1
  4. echo $param2;            //显示为1
  5. $param1 = 2;             //把2赋值给变量1
  6. echo $param2;            //显示为2
  7. ?>

3,函数传值

  1. <?php
  2. //传值
  3. $param1 = 1;                            //定义变量1
  4. function add($param2)                   //传参数
  5. {
  6. $param2=3;                          //把3赋值给变量2
  7. }
  8. $param3=add($param1);                   //调用方法add,并将变量1传给变量2
  9. echo  '<br>$param1=='.$param1.'<br>';   //显示为$param1==1
  10. echo  '<br>$param2=='.$param2.'<br>';   //显示为$param2==  因为$param2是局部变量,所以不能影响全局
  11. echo  '<br>$param3=='.$param3.'<br>';   //显示为$param3==  因为add方法没有返回值,所以$param3为空
  12. ?>

4,函数传引用

  1. <?php
  2. //传值
  3. $param1 = 1;                             //定义变量1
  4. function add(&$param2)                   //传参数
  5. {
  6. $param2=3;                          //把3赋值给变量2
  7. //    return $param2;                   //返回变量2
  8. }
  9. echo  '<br>$param1=='.$param1.'<br>';   //显示为$param1==1  没对变量1进行操作
  10. $param3=add($param1);                   //调用方法add,并将变量1的引用传给变量2
  11. echo  '<br>$param1=='.$param1.'<br>';   //显示为$param1==3  调用变量过程中,$param2的改变影响变量1,虽然没有return
  12. echo  '<br>$param2=='.$param2.'<br>';   //显示为$param2==   因为$param2局部变量,所以不能影响全局
  13. echo  '<br>$param3=='.$param3.'<br>';   //显示为$param3==   如果把方法里面的return注释去掉的话就为$param3==3
  14. ?>

5,函数传引用2

    1. <?php
    2. //传引用
    3. $param1 = 1;
    4. function &add(&$param2)
    5. {
    6. $param2 = 2;
    7. return $param2;
    8. }
    9. $param3=&add($param1);
    10. $param4=add($param1);
    11. echo  '<br>$param3=='.$param3.'<br>';   //显示为$param3==2
    12. echo  '<br>$param4=='.$param4.'<br>';   //显示为$param4==2
    13. echo  '<br>$param1=='.$param1.'<br>';   //显示为$param1==2  调用变量过程中,$param2的改变影响变量1
    14. $param3++;
    15. /*下面显示为$param1==3,这是因为$param2和$param1引用到同一个地方,
    16. * 返回值前面加了地址符号还是一个引用$param3=&add($param1);
    17. * 这样$param3,$param2和$param1引用到同一个地方,当$param3++;时,
    18. * $param1会被改变*/
    19. echo  '<br>$param1=='.$param1.'<br>';
    20. $param4++;
    21. /* 下面显示为$param1==3,这里为什么是3而不是4呢,这是因为返回值前面没有
    22. * 地址符号,它不是一个引用所以当$param4改变时不会影响$param1*/
    23. echo  '<br>$param1=='.$param1.'<br>';
    24. ?>

5个php实例,细致说明传值与传引用的区别的更多相关文章

  1. php传值和传引用的区别

    php传值和传引用的区别所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy:系统将为目标对象重新开辟一个完全相同的内存空间.所谓传引用,就是说将对象在内存中的地址传递给目标对象,就相当于使 ...

  2. java 函数形参传值和传引用的区别

    java方法中传值和传引用的问题是个基本问题,但是也有很多人一时弄不清. (一)基本数据类型:传值,方法不会改变实参的值. public class TestFun { public static v ...

  3. php中传值与传引用的区别。什么时候传值什么时候传引用?

    值传递:   函数范围内对值的任何改变在函数外部都会被忽略; 引用传递: 函数范围内对值的任何改变在函数外部也能反映出这些修改: 优缺点:按值传递时,php必须复制值.特别是对于大型的字符串和对象来说 ...

  4. java集合中的传值和传引用

    在学习java集合过程中发现了传值和传引用的区别: 我们来看下面两句话 ●java集合就像一种容器,我们可以把多个对象(实际上是对象的引用),丢进该容器.(来自疯狂java讲义) ●当使用Iterat ...

  5. 【转载】Java是传值还是传引用

    1. 简单类型是按值传递的 Java 方法的参数是简单类型的时候,是按值传递的 (pass by value).这一点我们可以通过一个简单的例子来说明: /* 例 1 */ /** * @(#) Te ...

  6. Go语言的传值与传引用

    Go语言里的传值与传引用大致与C语言中一致,但有2个特例,map和channel默认传引用,也就是说可以直接修改传入的参数,其他的情况如果不用指针的话,传入的都是参数的副本,在函数中修改不会改变调用者 ...

  7. java中的传值与传引用

    java函数中的传值和传引用问题一直是个比较“邪门”的问题,其实java函数中的参数都是传递值的,所不同的是对于基本数据类型传递的是参数的一份拷贝,对于类类型传递的是该类参数的引用的拷贝,当在函数体中 ...

  8. python函数传参是传值还是传引用?

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

  9. JavaScript系列----数据类型以及传值和传引用

    1.简单数据类型 在JavaScript中简单数据类型分为5种.分别为 Undefined, Null,Boolean,Number,String. Undefined类型Undefined类型只有一 ...

随机推荐

  1. 决策树--信息增益,信息增益比,Geni指数的理解

    决策树 是表示基于特征对实例进行分类的树形结构       从给定的训练数据集中,依据特征选择的准则,递归的选择最优划分特征,并根据此特征将训练数据进行分割,使得各子数据集有一个最好的分类的过程.   ...

  2. MySQL中的编码问题

    1.查看MySQL数据库的默认编码 (1).使用status命令 mysql> status -------------- mysql Ver 14.14 Distrib 5.5.28, for ...

  3. 面向对象【day07】:类的实例化过程剖析(三)

    本节内容 1.概述 2.类的语法 3.总结 一.概述 之前我们说关于python中的类,都一脸懵逼,都想说,类这么牛逼到底是什么,什么才是类?下面我们就来讲讲,什么是类?它具有哪些特性. 二.类的语法 ...

  4. mysql -- 动态获取结果集(重点)

    注意:语句传值的时候必须是带有@符号的参数,不能是自己的局部变量,一个@叫用户变量,两个@叫做全局变量.用户变量:当前用户的‘’全局变量‘’,用户状态存在时就存在,用户退出时消失. 初始版 delim ...

  5. 【小白技术笔记】保存皮皮虾APP无水印视频到手机相册,只需要三步 [技术干货]

    百万段友回皮皮虾,转身一变,都成了皮友.作为当年的资深段友,今天的皮友的我.看到好视频,经典视频,搞笑视频,就想保存一份到手机相册,然后皮皮虾啊皮皮虾,有个让人很讨厌的地方,保存视频的时候就有皮皮虾的 ...

  6. JMS的P2P和PUB/SUB区别和应用场景介绍【转】

    完全引用自: https://my.oschina.net/alexgaoyh/blog/338890  解释得非常棒. 1.P2P模型 在P2P模型中,有下列概念: 消息队列(Queue). 发送者 ...

  7. Keil软仿真STM32

    当使用Keil软仿真STM32时,SystemClock设置为72MHz,使用循环延迟1s钟,实际时间明显大于1S钟,但是Keil调试窗口显示的确实是1s钟//毫秒级的延时void delay_ms( ...

  8. linux系统--用户和用户组

    一.用户和用户组的概念 用户:使用操作系统的人 用户组:具有相同系统权限的一组用户.在linux系统中可以存在多个用户组 1.1 /etc/group 这里存储当前系统中所有用户组的信息 每一行对应一 ...

  9. Linux - 系统资源

    查看剩余内存 free -m #-/+ buffers/cache: #6458M为真实使用内存 1649M为真实剩余内存(剩余内存+缓存+缓冲器) #linux会利用所有的剩余内存作为缓存,所以要保 ...

  10. elasticsearch 基本配置

    基本配置elasticsearch的config文件夹里面有两个配置文件:elasticsearch.yml .logging.yml.jvm.options 第一个是es的基本配置文件,第二个是日志 ...