两者的区别:

值传递是两个变量占用不同的内存空间,而传引用则是同一个内存空间,实际就是对同一个变量进行操作。 传值,原有的值不会消失,不会改变,两个变量分别占用一个内存;传引用,原值会被修改,两个变量,只占用一个内存空间。

按值传递:函数范围内对值的任何改变在函数外部都会被忽略

按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改。

// 传值对参数的修改不会改变原参数

// 传引用时可以直接修改原参数

优缺点:

按值传递:php必须复制值(要重新构造一份原参数的拷贝)。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。

引用传递:不需要复制值(不需要重新开辟内存空间),对于性能提高很有好处。

什么情况下使用按值传递或引用传递?

如果不想改变原变量的值的时候就按值传递。

如果可以让函数改变了原变量的值就可以引用传递。

// 如果你的参数对象比较大(占用内存很多),而函数本身不需要修改原对象时,这个时候就推荐传引用,可以省去临时对象的构造开销。

// 如果你有实际修改原参数的需要,那么就只能传引用了。

// 按值传递

$a =3;

$b=5;

$a=$b;

echo $a,$b; // 5 5

//引用传递

$a=3;

$b=5;

$a=&$b; //把b的地址赋值给 $a 更改b的值 就是更改a的值

$b=9;

echo $a,$b; // 9 9

unset($b);

echo $a; // 9 //变量有个机制,如有多个变量指向同一个地址 取消其中一个变量,其他变量不受影响

//假如把指向该地址的所有变量都取消了 则echo变量的结果是NULL

历史上的今天:

php引用传递_php的按值传递与引用传递 - 小俊学习网相关推荐

  1. Java里的按值传递与引用传递

    按值传递还是按引用传递 这个在Java里面是经常被提起的问题,也有一些争论,似乎最后还有一个所谓的结论:"在Java里面参数传递都是按值传递".事实上,这很容易让人迷惑,下面先分别 ...

  2. Java基础中按值传递和引用传递详解

    下面是我在网上看到的一个帖子,解释的感觉挺全面,就转过来,以供以后学习参考: 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递.示例如下: [java] view plaincopy ...

  3. java中是值传递引用传递_Java是按值传递而不是按引用传递

    java中是值传递引用传递 One of the biggest confusion in Java programming language is whether java is Pass by V ...

  4. java继承和引用_浅谈Java继承、传递

    一.继承 1. 继承的概念: 子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法. 2. 继承中的初始化顺序: 从类的结构上而言,其内部可以有如下四种常见形态:属性(包括类属 ...

  5. java 数组传递是引用吗_数组是通过值传递还是通过Java引用传递?

    本问题已经有最佳答案,请猛点这里访问. Possible Duplicate: Is Java"pass-by-reference"? 数组不是Java中的原始类型,但它们也不是对 ...

  6. java include 传递对象_变量的值传递,地址引用(和对象成员变量、局部变量创建和初始化的内存机制)...

    变量的值传递,地址引用(和对象成员变量.局部变量创建和初始化的内存机制) 变量的值传递,地址引用: 搞懂=含义,=即指向,看指向的内存块是否发生改变,还有是否是新内存块, 通过指向可以控制内存块的值. ...

  7. Python:值传递,引用传递?不存在的,是赋值传递

    Python的变量及其赋值 c/c++/c#/java 里面都有值传递,引用传递的概念,在Python中是如何的? 例 a = 1 b = a print(id(a),id(b)) #14072334 ...

  8. c语言值传递 地址传递 引用传递参数,C++参数传递(值传递,引用传递)

    值传递 值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数. 在函数结束返回后,形参被丢弃释放,实参的内容不会被改变 数据值传递和地址值传递 数 ...

  9. java引用传递106_(转载)java的值传递与引用传递

    1 说明:本文的适用对象为java初学者.如果有读者发现文章中有叙述不妥之处,请指正.2 3 今天在论坛上有人提了一个关于java中调用函数时有没有引用传递的问题,可谓是吵的不可开交.有人说java只 ...

最新文章

  1. 服务器处理 json 数据
  2. EM算法 大白话讲解
  3. 火狐浏览器修改userAgent
  4. SpringBoot2 Redis连接池
  5. 使用ldconfig命令将/usr/local/lib加入到默认库
  6. mySQL 插入,更新和删除数据
  7. linux 清空history以及记录原理
  8. Qt实现窗口跳转(类似于看图软件中下一张和上一张)
  9. BT500-BT1788主观质量评价
  10. AutoCAD块属性提取
  11. linux安装frps服务,Debian手动搭建frps服务端
  12. 小程序项目从Hbuilder转移到vscode步骤
  13. 分享5个你可能不知道但非常实用的软件
  14. 人类简史 从动物到上帝
  15. xv视频提取器的一些用法
  16. 请教switch内部的变量定义问题?
  17. Tapdata 的 2.0 版 ,开源的 Live Data Platform 现已发布
  18. 三傻大闹宝莱坞经典台词
  19. 七夕专栏:看看大家都在干什么,对微博七夕超话的爬取
  20. 【浅度渣文】Jackson之jackson-core

热门文章

  1. 互联网晚报 | 2月13日 星期日 | 上汽荣威宣布多款新能源车型涨价;高亭宇破奥运会纪录夺金;演员总片酬不得超过制作成本40%...
  2. [vscode] markdown_index 可以为你的markdown标题添加序号的插件
  3. 网络爬虫——中国大学排名数据抓取
  4. 计算机c语言入门.ppt,计算机c语言入门经典
  5. 阿里云服务器设置swap交换分区
  6. 解决Typora笔记在另一台电脑上无法显示图片的问题
  7. Android中DialogFragment自动弹出输入法
  8. macw资讯——妙控键盘与智能键盘:哪个适合您的 iPad?
  9. Web3+品牌的大杀器:DAO如何实现对传统品牌彻底的降维打击
  10. windows环境下安装RabbitMQ(超详细)