区别PHP引用传递与值传递的小例子

定义

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

说明

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

实例

  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,这是因为$param3和$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. ?>

原文地址:https://www.cnblogs.com/icodes/p/8830493.html

时间: 2024-11-06 07:15:16

区别PHP引用传递与值传递的小例子的相关文章

Java技术_Java千百问(0039)_引用传递和值传递有什么区别

点击进入_更多_Java千百问 1.什么是值传递 值传递,是将内存空间中某个存储单元中存放的值,传送给另一个存储单元.(java中的存储单元并不是物理内存的地址,但具有相关性) 例如: //定义了一个改变参数值的函数 public static void changeValue(int x) { ??x = x *2; } public class TestMain{ //调用该函数 int num = 5; System.out.println(num); changeValue(num);

理解Java中的引用传递和值传递

关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天学习和分析一下,着急可以先看最后的结论. >>基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型.相应的,变量也有两种类型:基本类型和引用类型.基本类型的变量保存原始值,即它代表的值就是数值本身:而引用类型的变量保存引用值,"引用值"指向内存空间的地

(转载)理解Java中的引用传递和值传递

关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天学习和分析一下,着急可以先看最后的结论. 1.基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型.相应的,变量也有两种类型:基本类型和引用类型.基本类型的变量保存原始值,即它代表的值就是数值本身:而引用类型的变量保存引用值,"引用值"指向内存空间的地址,代表了某

引用传递与值传递

一.ECMAScript中的数据类型 1.基本数据类型:null.undefined.number.boolean.string 2.引用数据类型:object(obj.[].{}.function.RegExp等),是由一组无序的名值对组成的 3.typeof与instanceof作用: typeof是用来检测这些基本数据类型的: 返回"underfined",表示这个值只是被声明了,却没有给其定义,也可以理解为没有赋值 返回"boolean"表示这个值是布尔值,

Java Object 引用传递和值传递

Java Object 引用传递和值传递 @author ixenos Java中的引用传递: 除了在将参数传递给方法(或函数)的时候是"值传递",传递对象引用的副本,在任何用"="向引用对象变量赋值的时候都是"引用传递",传递对象的引用给另一个变量. 参数传递,传递引用的副本,这看起来是引用传递,实则是传递了副本,这已经是值传递的概念了: 变量赋值,传递引用,这算引用传递 Java参数传递中没有引用传递都是值传递 1.在 Java 应用程序中永

Java中没有引用传递只有值传递(在函数中)

◆传参的问题 引用类型(在函数调用中)的传参问题,是一个相当扯的问题.有些书上说是传值,有些书上说是传引用.搞得Java程序员都快成神经分裂了.所以,我们最后来谈一下“引用类型参数传递”的问题. 如下例子,假设现在要把刚才创建的那一坨字符串打印出来,我们会使用如下语句: StringBuffer str = new StringBuffer(); System.out.println(str); //这个语句又是什么意思捏?这时候就两说了. 第一种理解:可以认为传进函数的是str这个指针,指针说

一道关于引用传递和值传递的JS题

先看题1 var obj = {name:"a"} function bar(obj) { console.log(obj.name); obj = {name:"b"}; console.log(obj.name) } console.log(bar(obj)) console.log(obj.name) 在chrome控制台执行以下看看,发现依次打印 aba 题2,稍微有点变化 var obj = {name:"a"} function ba

Java中是引用传递还是值传递?

前言 在学习Java编程语言过程中最容易让你产生误解的问题之一就是 java是值传递还是引用传递.今天就来围绕这个话题揭开迷雾. 概念 首先先来认识一下什么是值传递什么是引用传递. 值传递: 将方法实际参数值复制到另一个变量,然后复制的对象被传递,这就是为什么它被称为"值传递" 引用传递:将实际参数的引用传递给该方法,这就是为什么它被引用称为"传递"的原因. 例子分析1 问题:如果java是使用引用传递的话,为什么在函数中 变量的交换会没有卵用呢? 答案:java通

关于java中是引用传递还是值传递的问题!!!经常在笔试中遇到,今天终于弄明白了!

关于JAVA中参数传递问题有两种,一种是按值传递(如果是基本类型),另一种是按引用传递(如果是對象).首先以两个例子开始:1)public class Test2 { public static void main (String [] args) { StringBuffer a = new StringBuffer ("A"); StringBuffer b = new StringBuffer ("B"); operate (a,b); System.out.

java引用传递和值传递

关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天学习和分析一下,着急可以先看最后的结论. 1.基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型.相应的,变量也有两种类型:基本类型和引用类型.基本类型的变量保存原始值,即它代表的值就是数值本身:而引用类型的变量保存引用值,"引用值"指向内存空间的地址,代表了某