首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

php引用符号详解 (基础回顾)

PHP 引用的意思是:不同的名字访问同一个变量内容. 以上代码是在PHP5的运行的效果,在PHP5 对象的复制 是通过引用来实现的。...上列$b=new a; $c=$b; 其实等效于$b=new a; $c=&$b; PHP5默认就是通过引用来调用对象, 但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本。...引用的作用 如果程序比较大,引用同一个对象的变量比较多,并且希望用完 该对象后手工清除它,建议用 "&" 方式,然后用$var=null的方式清除。其它时候还是用php5的默认方式吧.。...另外, php5对于大数组的传递,建议用 "&" 方式, 毕竟节省内存空间使用。 取消引用 当你 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。

1.7K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PHP引用的详解(引用计数、写时拷贝)

    PHP引用的详解 huangguisu 《PHP5文手册》内容"引用的解释"一文的摘要: 1....PHP引用的特性 PHP引用意味着用不同的名字访问同一个变量内容,引用不是C的指针(C语言中的指针里面存储的是变量的内容,在内存存放的地址),是变量的另外一个别名或者映射。...注意: 和参数传递不同,这里必须在两个地方都用 & 符号:定义和使用时都需要加&符号。 & test()指出返回的是一个引用,而不是通常的一个拷贝。...$this 在一个对象的方法,$this 永远是调用它的对象的引用。 9. PHP引用使用注意事项 很多人误解Php引用跟C当中的指针一样,事实上并非如此,而且很大差别。...C语言中的指针除了在数组传递过程不用显式申明外,其他都需要使用*进行定义,而php对于地址的指向(类似指针)功能不是由用户自己来实现的,是由Zend核心实现的,php引用采用的是“引用计数、写时拷贝

    3.7K10

    PHP内存的对象和引用简介

    PHP的对象和引用 许多人在PHP书籍和网站中表示,PHP的对象默认是通过引用传递的。也有人说PHP的对象是通过拷贝来分配的。...为了弄清楚哪个语句是正确的,首先我们必须分析PHP引用的是什么(以及什么不是)。 在PHP什么是引用 比了解PHP引用是什么更重要的是知道什么不是。...请记住,在PHP,变量名和变量的内容是两个完全不同的东西,它们被链接在所谓的“符号表”。因此,当我们创建一个引用时,它只是在符号为该变量添加一个别名。...当PHP符号没有对该对象的引用时,PHP内存的对象或变量将被PHP垃圾收集器删除。...当符号没有对该对象的引用时,PHP垃圾回收器会将其删除。 如何存储PHP内存引用PHP内存引用存储在名为符号表的键值存储

    2K10

    php对象引用和复制实例分析

    本文实例讲述了php对象引用和复制。分享给大家供大家参考,具体如下: 引用 $tv2 = $tv1; 或者 $tv2 = &$tv1; 以上两种方式,效果是一样的。...也就是说,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。...也就是说,深复制把要复制的对象所引用的对象都复制了一遍。 代码示例 <?...相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string...)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》 希望本文所述对大家PHP程序设计有所帮助。

    84340

    彻底搞明白PHP引用的概念

    彻底搞明白PHP引用的概念 之前我们其实已经有过几篇文章讲过引用方面的问题,这次我们来全面的梳理一下引用PHP到底是怎么回事,它和C的指针有什么不同,在使用的时候要注意些什么。 什么是引用?...在 PHP 引用意味着用不同的名字访问同一个变量内容。它不是C的指针,保存的并不是内存地址,无法进行指针运算。引用只是符号表的别名。...指针是针对真实内存的操作,引用是针对指向这个内存的符号表的操作。还是从操作系统的快捷方式来说,快捷方式是可以删的,这就是PHP引用。而C不仅删了快捷方式,还把原文件也给删了,这就是C的指针操作。...对$o2属性的操作不仅会反映在$o1,也会反映到$o3。其实我们之前专门有一篇文章就讲的这个问题,首先对象默认赋值就是引用,其次这个例子很好地证明了引用就是一个符号表的绑定。...但是一定要记住,PHP引用是指向的符号表,对原始真实的值是不起作用的,所以即使unset掉了最原始的那个变量,对其它引用赋值的变量也不会有影响!!

    62030

    面试题18:什么是符号引用?什么是直接引用

    在解析阶段会有一个步骤,将运行时常量池当中二进制数据当中的符号引用转化为直接引用的过程。 ---- 【符号引用】 以一组符号来描述所引用的目标。...符号引用可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可,符号引用和虚拟机的布局无关。 为什么要有符号引用?...在编译的时候每个java类都会被编译成一个class文件,但在编译的时候虚拟机并不知道所引用类的地址,所以就用符号引用来代替,而在解析阶段就是为了把这个符号引用转化成为真正的地址的阶段。...---- 【直接引用】 直接引用和虚拟机的布局是相关的,不同的虚拟机对于相同的符号引用所翻译出来的直接引用一般是不同的。 如果有了直接引用,那么直接引用的目标一定被加载到了内存。...---- 【示例】 创建一个Student.java类 执行javap -verbose Student.class 红框中就是我们上面陈述的符号引用

    80011

    对象赋值在PHP到底是不是引用

    对象赋值在PHP到底是不是引用? 之前的文章,我们说过变量赋值的问题,其中有一个问题是对象在进行变量赋值的时候,直接就是引用赋值。那么到底真实情况是怎样呢?...之前变量赋值的文章 PHP的变量赋值 对象引用测试 在继续深入的学习PHP手册后,发现原来对象还真不是直接的引用复制。...而引用赋值是复制指针(相同的内存地址),修改任意一个变量其他的变量也会改变。但是对象的普通赋值貌似并不属于它们的任何一个。...$reference很好理解,本身使用&符号进行了赋值,表明了这个变量是一个引用赋值。它成为了$instance的快捷方式,$instance的一切变化它都都会跟着改变。这是变量层面的。...在PHP手册中有一个Note是如此描述的: 首先,将PHP的变量看成是一个一个的数据槽。这个数据槽可以保存一个基本类型(int、string、bool等)。

    1.8K20

    PHP 循环引用的问题

    php $arr = [ 'a', 'b', 'c', 'd', ]; foreach ($arr as &$each){ echo $each; } echo PHP_EOL...php $arr = [ 'a', 'b', 'c', 'd', ]; foreach ($arr as &$each){ echo $each; } echo PHP_EOL...仔细看上面的foreach循环, each变量使用了&符号, 这个符号相当与c的取址 php的foreach会在每次循环时,讲当前元素赋值给each, 然后进入循环体 当foreach遍历完成后, each...变量没有释放而是指向了arr数组的最后一个元素, 所以在后面给each赋值时, 其实改变的时arr数组的最后一个元素 到此, 流程已经明白了, 下面还原一下最开始的两次foreach过程: 在第一个foreach...var_dump($arr); } 结果截图如下: 结果与我们分析的完全一致, 至此, 完结 我使用的php版本为: 7.2

    3.7K20

    php引用传值详解

    php引用(就是在变量或者函数 、对象等前面加上&符号) 在PHP 引用的意思是:不同的名字访问同一个变量内容....与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存存放的地址 变量的引用 PHP引用允许你用两个变量来指向同一个内容 以上代码是在PHP5的运行效果 在PHP5 对象的复制 是通过引用来实现的。...上列$b=new a; $c=$b; 其实等效于$b=new a; $c=&$b; PHP5默认就是通过引用来调用对象, 但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本 ....//下面再来个小插曲 php对于地址的指向(类似指针)功能 不是由用户自己来实现的,是由Zend 核心实现的,php引用采用的是“写时拷贝”的原理,就是除非发生写操作,指向同一个地址的变量或者对象是不会被拷贝的

    5.2K20

    Java引用、软引用、虚引用、强引用、 Finalizer引用

    在Java层面,一共有四种引用:强引用、软引用、弱引用、虚引用,这几种引用的生命周期由强到弱。转换关系大致如下图所示: ?...对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显式地将相应(强)引用赋值为 null,就是可以被垃圾收集的了。...,在垃圾回收器线程扫描它所管辖的内存区域的过程,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存 System.gc(); // 软引用的对象在内存充足的情况下不会回收...引用何时被加到ReferenceQueue队列里   在构造软引用,弱引用和幻象引用的时候,可以传入一个ReferenceQueue的对象,这个队列是用来做什么的呢?...在我们的系统里无法被构造(类被定义成package final 类型),Finalizer的实例是一个双向链表的结构,内部有prev与next指针,提供了add与remove方法将对象增加到链表与从链表删除对象

    2.1K30

    C语言进阶小技巧,弱符号和弱引用

    用于在 C,C++,Objective-C 修饰变量、函数、参数、方法、类等。 合理使用 __attribute__ 有什么好处?...这个其实是是有所偏颇的,GNU C对标准C语言进行了扩展,在GCC,对于符号(在编译时,变量和函数都被抽象成符号)而言,存在着强符号和弱符号之分。...强引用和弱引用 除了强符号和弱符号的区别之外,GNUC还有一个特性就是强引用和弱引用。...注意这里是声明而不是定义,既然是引用,那么就是使用其他模块定义的实体,对于函数而言,我们可以使用这样的写法: __attribute__((weakref)) void func(void); 然后在函数调用...强/弱符号和强/弱引用的作用 这种弱符号、弱引用的扩展机制在库的实现中非常有用。 我们在库可以使用弱符号和弱引用机制,这样对于一个弱符号函数而言,用户可以自定义扩展功能的函数来覆盖这个弱符号函数。

    92120

    php引用类型底层解析

    php $a = "string"; $b = &$a; echo $a; echo $b; $b = "hello"; echo $b; echo $a; unset($b); echo $b;...我们来分析一下 首先我们看一下引用类型的结构 struct _zend_reference { zend_refcounted_h gc; zval val;...}; 我们可以看到,引用类型是一个变量zval和一个zend_refcounted_h组成 先看第一段的 a = "string"; (gdb) p *z $1 = {value = {lval =...fe_iter_idx = 0, access_flags = 0, property_guard = 0, extra = 0}} //我们可以看到$a的u1的type为10,所以说明$a已经是引用类型了...仅仅是把b的u1的type改为了0,为null类型,其余的地址等信息都未改变,所以对应的$a是不会有任何改变的 所以后面在打印$a的过程,一切都是正常的,以下为$a的打印过程 (gdb) p *z

    3.9K10

    学习PHP引用的知识

    学习PHP引用的知识 之前的文章,我们已经学习过引用引用传值相关的知识。我们知道,PHP 没有纯引用(指针),不管是对象,还是用引用符号 & 赋值的变量,都是对一个符号表的引用。...从这个说明,我们可以看出,弱引用也是一种引用形式,但是,如果我们销毁了原来的对象,那么弱引用对象也会被销毁,就像普通的值对象赋值一样。...如果没有看过之前的文章,或者对 PHP 引用不太熟悉的朋友可能需要再了解一下 PHP 引用相关的知识。下面,我们直接通过示例来看一下。...这就是弱引用的作用! 它可以让垃圾回收器正常的回收,它可以避免循环引用带来的内存泄漏问题,它能让引用表现为类似于 C 的指针操作一样。...因为弱引用是通过变量来创建的,它指向的是原始对象的符号表,而变量和对象之间的符号表连接才是弱引用关心的内容,它会根据符号表的状态来判断当前的状态。

    3K40
    领券