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

说明:

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

一,php实例

1,传值

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

2,传引用

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

  

3,函数传值

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

4,函数传引用

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

5,函数传引用2

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

6,对象传递与&对象传递

<?phpclass A3 {public $foo = 'empty';}class B3 {public $foo = 'empty';public $bar = 'hello';}function normalAssignment($obj) { //对象用作普通参数$obj->foo = 'changed';$obj = new B3; //这里说明对象是普通的地址传值
    }function referenceAssignment(&$obj) {//对象用&传值$obj->foo = 'changed';$obj = new B3; //这里体现了区别 &引用的别名
    }$a = new A3;normalAssignment($a);echo get_class($a), "\n";//输出A3echo "foo = {$a->foo}\n";//输出foo = changed
    referenceAssignment($a);echo get_class($a), "\n";//输出B3  关键理解这里为什么echo "foo = {$a->foo}\n";//foo = empty echo "bar = {$a->bar}\n";//bar = hello ?>

转载于:https://www.cnblogs.com/tkzc2013/p/8624895.html

php值传参,引用传参以及对象传参相关推荐

  1. mybatis多对一,一对一,多对多resultMap映射,pojo映射,传参集合,封装的对象传参

    普通映射: <!-- 使用resultMap解决列名和属性名不一致的情况 --><!-- 配置一个resultMap映射列和属性 --><resultMap type=& ...

  2. c++ 计算长方形面积 类对象传参

    c++ 计算长方形面积 类对象传参 题目 问题描述 问题分析 设计思想 设计表示 源代码 测试数据及运行结果 题目 编写一个程序计算两个给定长方形的面积,其中在设计类成员函数addarea()(用于计 ...

  3. springmvc 对象传参

    springmvc 对象传参 第一种情况 public class User implements Serializable {private Integer id;private String na ...

  4. uni-app 父传子、子传父、路径传参、本地存储

    一.父传子 父传子步骤:①要动态绑定一个属性给子组件 ②子组件要接收父组件传过来的值,就要使用props接收 ③然后子组件就可以使用了 代码实现: 父组件 //template代码 <Son : ...

  5. python传递参数格式_Python语言学习基础篇之Python发送Post请求之根据参数位置传参、数据类型、不同方式传参...

    本文主要介绍了Python语言学习基础篇之Python发送Post请求之根据参数位置传参.数据类型.不同方式传参,通过具体的内容向大家展现,希望对大家Python语言的学习有所帮助. 目录 一.验证 ...

  6. Python 跨类传参与跨模块传参

    笔者初学python,编写了一个小游戏进行参数传递练习,文字描述部分稍显简陋,还请见谅,现将代码贴上. Map.pyclass master_bedroom():def __init__(): pri ...

  7. JavaScript高级day01-AM【WebStrom安装、数据类型分类及判断、数据-内存-变量、引用变量赋值、对象的组成】

    笔记.视频.源码:JavaScript(基础.高级)笔记汇总表[尚硅谷JavaScript全套教程完整版] 目   录 P1 01.尚硅谷_JS高级_准备 07:07 WebStrom 下载及安装 1 ...

  8. java怎么无参构造方法_Java中如何在无参构造方法中调用有参构造?

    展开全部 一般正常的都是参数多的调用参数少的.有参数的调用无参数的居e68a843231313335323631343130323136353331333365643537多. 当然你要无参调用的参的 ...

  9. 只要写了带参构造函数则不会再生成无参构造函数,不管该带参构造函数是否是private的

    如果写了带参构造函数,即使该带参构造函数是private的,直接new对象不传参数时也会报错,需要写出public的无参构造函数时才可以直接new对象不传参数.即只要写了带参构造函数则不会再生成无参构 ...

  10. js函数调用html对象参数传递参数吗,js里函数参数传递对象传的是指针吗

    js高程 page88在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量(即命名参数,或者用ECMAScript 的概念来说,就是arguments 对象中的一个元素).在向参数传递引用类型 ...

最新文章

  1. 飞书×品玩邀请多位行业大咖,共谈跨境企业“战疫”秘籍!
  2. 50~80万项目需求|室内场景三维重建项目
  3. 架构的“一小步”,业务的一大步
  4. R语言实战应用-lightgbm 算法优化:不平衡二分类问题(附代码)
  5. java ibm 2035,C# java 连接 IBM MQ时出现 2035 或 2013认证错误的解决方法
  6. Hamcrest匹配器常用方法总结
  7. 面试官通过21天步数考察候选人诚意,结果拒了清华生收了三本生
  8. 学javascript看什么书?
  9. 一致性hash算法Consistent Hashing
  10. 实操教程|使用计算机视觉的方法在钢铁平面上检测焊接缺陷
  11. html5 dom操作api,17 HTML5 DOM获取元素.html
  12. 安卓蓝牙键盘按键映射_键盘按键映射器安卓版
  13. 季节怎么形容_描写四季冬的词语 形容冬天季节的词语
  14. 如何用python实现爬虫自动爬取百度图片原图
  15. 用R自动生成pdf文件
  16. 安装tensorflow的GPU版本(详细图文教程)--CUDA11.6的安装
  17. OFD格式文件怎么转PDF格式?分享一个轻松转换小妙招
  18. oneshot一次性服务
  19. 字符串转为 double 类型
  20. python计算召回率_机器学习之分类:精确率和召回率

热门文章

  1. DNN和IBatis.Net几乎同时发布新版本
  2. CV04-UNet笔记
  3. 区块链将带来怎样的应用?
  4. aws fargate_我如何在AWS Fargate上部署#100DaysOfCloud Twitter Bot
  5. 影像锐化工具_如何以及为什么要进行工具改造:花在锐化斧头上的时间永远不会浪费...
  6. unity水管工_我是如何从30岁的管道工转变为32岁的Web开发人员的
  7. java培训机构如何选择适合自己的
  8. Python List 列表list()方法
  9. java timer cron_Java之旅--定时任务(Timer、Quartz、Spring、LinuxCron)
  10. MongoDB主动撤回SSPL的开源许可申请