php引用传递_php的按值传递与引用传递 - 小俊学习网
两者的区别:
值传递是两个变量占用不同的内存空间,而传引用则是同一个内存空间,实际就是对同一个变量进行操作。 传值,原有的值不会消失,不会改变,两个变量分别占用一个内存;传引用,原值会被修改,两个变量,只占用一个内存空间。
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改。
// 传值对参数的修改不会改变原参数
// 传引用时可以直接修改原参数
优缺点:
按值传递: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的按值传递与引用传递 - 小俊学习网相关推荐
- Java里的按值传递与引用传递
按值传递还是按引用传递 这个在Java里面是经常被提起的问题,也有一些争论,似乎最后还有一个所谓的结论:"在Java里面参数传递都是按值传递".事实上,这很容易让人迷惑,下面先分别 ...
- Java基础中按值传递和引用传递详解
下面是我在网上看到的一个帖子,解释的感觉挺全面,就转过来,以供以后学习参考: 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递.示例如下: [java] view plaincopy ...
- java中是值传递引用传递_Java是按值传递而不是按引用传递
java中是值传递引用传递 One of the biggest confusion in Java programming language is whether java is Pass by V ...
- java继承和引用_浅谈Java继承、传递
一.继承 1. 继承的概念: 子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法. 2. 继承中的初始化顺序: 从类的结构上而言,其内部可以有如下四种常见形态:属性(包括类属 ...
- java 数组传递是引用吗_数组是通过值传递还是通过Java引用传递?
本问题已经有最佳答案,请猛点这里访问. Possible Duplicate: Is Java"pass-by-reference"? 数组不是Java中的原始类型,但它们也不是对 ...
- java include 传递对象_变量的值传递,地址引用(和对象成员变量、局部变量创建和初始化的内存机制)...
变量的值传递,地址引用(和对象成员变量.局部变量创建和初始化的内存机制) 变量的值传递,地址引用: 搞懂=含义,=即指向,看指向的内存块是否发生改变,还有是否是新内存块, 通过指向可以控制内存块的值. ...
- Python:值传递,引用传递?不存在的,是赋值传递
Python的变量及其赋值 c/c++/c#/java 里面都有值传递,引用传递的概念,在Python中是如何的? 例 a = 1 b = a print(id(a),id(b)) #14072334 ...
- c语言值传递 地址传递 引用传递参数,C++参数传递(值传递,引用传递)
值传递 值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数. 在函数结束返回后,形参被丢弃释放,实参的内容不会被改变 数据值传递和地址值传递 数 ...
- java引用传递106_(转载)java的值传递与引用传递
1 说明:本文的适用对象为java初学者.如果有读者发现文章中有叙述不妥之处,请指正.2 3 今天在论坛上有人提了一个关于java中调用函数时有没有引用传递的问题,可谓是吵的不可开交.有人说java只 ...
最新文章
- 服务器处理 json 数据
- EM算法 大白话讲解
- 火狐浏览器修改userAgent
- SpringBoot2 Redis连接池
- 使用ldconfig命令将/usr/local/lib加入到默认库
- mySQL 插入,更新和删除数据
- linux 清空history以及记录原理
- Qt实现窗口跳转(类似于看图软件中下一张和上一张)
- BT500-BT1788主观质量评价
- AutoCAD块属性提取
- linux安装frps服务,Debian手动搭建frps服务端
- 小程序项目从Hbuilder转移到vscode步骤
- 分享5个你可能不知道但非常实用的软件
- 人类简史 从动物到上帝
- xv视频提取器的一些用法
- 请教switch内部的变量定义问题?
- Tapdata 的 2.0 版 ,开源的 Live Data Platform 现已发布
- 三傻大闹宝莱坞经典台词
- 七夕专栏:看看大家都在干什么,对微博七夕超话的爬取
- 【浅度渣文】Jackson之jackson-core
热门文章
- 互联网晚报 | 2月13日 星期日 | 上汽荣威宣布多款新能源车型涨价;高亭宇破奥运会纪录夺金;演员总片酬不得超过制作成本40%...
- [vscode] markdown_index 可以为你的markdown标题添加序号的插件
- 网络爬虫——中国大学排名数据抓取
- 计算机c语言入门.ppt,计算机c语言入门经典
- 阿里云服务器设置swap交换分区
- 解决Typora笔记在另一台电脑上无法显示图片的问题
- Android中DialogFragment自动弹出输入法
- macw资讯——妙控键盘与智能键盘:哪个适合您的 iPad?
- Web3+品牌的大杀器:DAO如何实现对传统品牌彻底的降维打击
- windows环境下安装RabbitMQ(超详细)