php中对象是引用类型吗?
这貌似是一个极其简单的问题,还用得着专门写一篇博文?各位看官,最初我也这么认为,但这的确蒙蔽了你那水灵灵的小眼睛,不妨看看什么是引用?
$a = 10;
$b = &$a;
$b = 20;
var_dump($a,$b);
在这段极其简单的代码中,$b是$a的引用,也即是别名,修改$b,$a会变,反之亦然。这就是所谓的引用,那对象是不是也是这样的呢?
class A
{
public $num = 10;
}
$a = new A();
$a->num = 20;
function demo($b)
{
$b[0] = 5;
var_dump($b);
}
demo($a)
var_dump($a);
你会发现两次输出一样,那这是不是说明对象做函数参数时是引用传参呢?在这一点上不得不说×××的学生的确是勤学好问,我刚开始以为是引用传参,但同学提出如果你把demo里修改为:
function demo($b)
{
$b = new A();
var_dump($b);
}
两次输出并不一样!这是为什么呢?如果从C语言角度讲,PHP里的任何变量,包括对象都是指针,对象做参数相当于二重指针,所以当$b指向一个全新的对象后,并不影响$obj,所以对象做函数参数并不是引用传参!又这么一帮勤学好问的学生,整个水准都不一样了。
互联网+时代,时刻要保持学习,携手×××PHP,Dream It Possible。
转载于:https://blog.51cto.com/ylhalo/1932679
php中对象是引用类型吗?相关推荐
- 编写程序,使用一维数组,模拟栈数据结构。 要求: 1、这个栈可以存储java中的任何引用类型的数据。 2、在栈中提供push方法模拟压栈。(栈满了,要有
代码 /*第一题:编写程序,使用一维数组,模拟栈数据结构.要求:1.这个栈可以存储java中的任何引用类型的数据.2.在栈中提供push方法模拟压栈.(栈满了,要有提示信息.)3.在栈中提供pop方法 ...
- Java中4种引用类型笔记
强引用(Strong Reference) 强引用就是我们经常使用的引用,其写法如下: Object o=new Object(); // 强引用 当内存空间不足,Java虚拟机宁愿抛出OutOfMe ...
- java中四种引用类型(对象的强、软、弱和虚引用)
2019独角兽企业重金招聘Python工程师标准>>> 对象的强.软.弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有 ...
- javascript变量中基本类型和引用类型的详解解读
前言: Javascript语言中的变量和其他语言的变量有很大区别,javascript松散类型的本质,决定了它只是在特定时间时间保存特定值得名字而已.由于不存在定义某个变量必须保存何种数据类型值的规 ...
- C++中如何初始化类中const或引用类型的数据成员?
在C++中,如果没有在构造函数初始值列表中显示地初始化成员,则该成员将在构造函数体之前执行默认初始化.之后,再进入构造函数体{}中,随着构造函数体一开始执行,初始化地工作实际上就完成了. 下面两个构造 ...
- javascript中基本类型和引用类型的区别分析
大多数人系统学习过的程序设计语言,在这些语言的学习过程中最早学到的几个要点之一就是值类型和引用类型的区别.下面我们来看一下在 JavaScript 中基本数据类型(Primitive Types)和引 ...
- javascript中基本类型和引用类型复制变量的值
基本类型值指的是简单地数据段,引用类型的值指的是那些可能由多个值构成的对象. 基本数据类型:Undefined,Null,Boolean,Number,String. 如果从一个变量向另一个变量复制基 ...
- ECMAScript中基本类型和引用类型的值在复制变量值时的区别
一. 复制基本类型变量的值 如果从一个变量向另一个变量复制基本类型的值时,会在原变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上. 举例: var a1=5; var a2=a1; ale ...
- C#中完美克隆引用类型的对象
我们都知道,在C#中,对于复杂对象,每声明一个牸类型的变量a,并用个该类型的对象A给这个变量赋值的时候,其实是让这个变量a指向了对象A,在内存中并没有多生成一个对象A的实例.所以不管我们声明多少个等于 ...
- 浅谈Python中对象是如何被调用的
楔子 我们知道对象是如何被创建的,主要有两种方式,一种是通过Python/C API,另一种是通过调用类型对象.对于内置类型的实例对象而言,这两种方式都是支持的,比如列表,我们即可以通过[]创建,也可 ...
最新文章
- volatile和内存屏障(dmb)
- mysql登录不了_登录不了MySQL的解决方法
- 深入分析MFC文档视图结构(项目实践)
- C++ 静态成员变量静态成员函数
- 编程实现strcpy函数
- 【技术白皮书】第四章:信息抽取技术产业应用现状及案例(下)
- 域名注册网站服务比较
- android按住录音按钮_Android仿微信录音功能
- TortoiseSVN不会弹出认证(账号密码)或 TortoiseSVN正在启动版本库浏览器
- openwrt 挂载硬盘NFS共享,非SMB共享
- 每日一思(2022.5.19)——前无古人后无来者
- JS黄金分割法实现随机漂亮颜色!
- Adobe Flash Player 32.0.0.371 绿色特别版
- 数据恢复 diskginus
- CBitmap Detach DeleteObject关系
- 使用内核驱动上手 x710 flow directory 功能
- java 小偷_浅谈小偷程序之Java
- 自动弹窗加qq群教程
- Spring Cloud笔记 中级篇
- 用 PyPy 让你的 Python 代码运行得更快!
热门文章
- IBM AIX5.3 linux下C/C++实现HTTPS接口
- 如虎添翼VSPHERE 4/5 环境下 linux/windows 动态扩展磁盘
- 如何隐藏UITabBar 已经如何使已经隐藏的TabBar重现(原创)
- 思想的交流,扩大视野
- linux网络分析之回环网卡
- kswapd进程与swap、swappiness之间的关系及原理
- DPDK QOS4 -- PORT数据结构的初始化
- visual studio code快捷键整理成图片
- G - 罐子和硬币 (思维题)
- unity update 协程_[转载]【转载】unity3D中使用协程来做“多次调用一次更新”特性的一个大坑。...