返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php的变量引用与销毁机制
  • 227
分享到

php的变量引用与销毁机制

php开发语言 2023-09-01 07:09:08 227人浏览 薄情痞子
摘要

在PHP中,符号"&"表示引用。 1、看看不引用的情况是这样子: $a = "hello world";//定义一个变量,下面赋值给$b$b = $a;//这一步没有在$a之前加符号&,像这样子"$b= & $a"。没有加&,实际上原理是

PHP中,符号"&"表示引用。

1、看看不引用的情况是这样子:

$a  = "hello world";//定义一个变量,下面赋值给$b$b = $a;//这一步没有在$a之前加符号&,像这样子"$b= & $a"。没有加&,实际上原理是会将变量$a复制拷贝一份,也就是内存中重新申请一个地址存储变量$b了

复制

ps:在php中,使用"="直接赋值,其实就是拷贝一份右边的变量给b,会生成一份内存空间,结果可能是同样的内容在内存中两份。在有些关于php性能方面提到,这样子会多占有内存空间。不过我接触中,大部分人没怎么注意,其实一般应用这样子用产生的显著差异并不明显。不会看到什么效果,其实我本人也没经常使用&进行引用,呵呵。只是我觉得,深入了解里面的实现原理,非常有必要。我喜欢关注原理性的东西。

2、使用符号&进行引用

$a  = "hello world";$b = &  $a;

复制

使用引用,php引擎不会拷贝一份变量,其实就是将指针指向了$a在内存中的地址,$b中就是保存了这个指针。

所以使用引用的时候,把$b的值改变,$a也会跟着改变

比如:

$a  = "hello world";$b = &  $a;$b = "test new value";//把b的值改掉,a的值也会跟着改变echo $a;//输出test new value,因为改变了b的值也会改变a的值。

复制

=====================================

经常在定义函数的时候看到像这样的情况:

function test (& $param){//函数定义的内容$param++;}

复制

解释:$param前面带有引用,所以传入进来的参数并不会在内存中拷贝一份,而是直接对原来的内存空间进行引用。所以:如果里对使用符号&传入进来的变量值进行修改了,那么也会改变原来的内存空间中的值。

做个测验如下:

$k = 8;test($k);echo $k;//结果$k的值被函数里面改变了,输出9。

复制

还会经常看到这样子调用函数:

$return  = & test_func();

复制

前面了解到php引擎的机制是:=会把右边的内容拷贝一份给予左边的变量。所以使用&就是将函数的结果不会进行拷贝一份,实际上我的理解是把指针给了左边的变量。

什么是指针,以前学C语言中的概念。我的理解是就是:指针,指针,指向针(指南针,呵呵)。把指针看成是一个内存的地址容易理解点,计算机就知道去内存什么位置找数据了吧。这是浅显的理解,深入的我不会,呵呵。

总结:使用引用是为了减少内存资源的占用。

php手册中对引用的解释如下:

在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,替代的是,引用是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身——变量名是目录条目,而变量内容则是文件本身。引用可以被看作是 Unix 文件系统中的 hardlink。

销毁变量的时候。并不会改变原来的值。

试验:$b = & $a;

既然改变$b的值,$a的值也跟着改变,假如把$b销毁掉(内存中不占用空间了,不是null,也不是值为""),$a的值是不是也会跟着被删掉呢?

其实国外有本php方面的书中专门提到了这个机制。2年前看的。不是很记得了。原则是就是删除变量的时候,会自动拷贝。

其实这样子,就是为了避免把$b给删掉,造成把$a也给删掉的问题。

//只有等到销毁的时候就会自动拷贝一份。php不会把被引用的变量销毁掉。$a = 'd';$b = & $a;$b = 8;//因为是引用了,所以把b的值改掉,a的值也跟着改为8了。var_dump($b,$a);unset($b);//调用unset删除b变量,a变量不会删除var_dump($b,$a);//输出null和8

复制

调用unset删除$b变量的时候,php引擎从变量符号表中发现:我要删除的变量$b原来是引用了变量$a,这不好删除啊,因为一删除导致$a变量也没了,所以就先把$a变量拷贝一份后在删除$b变量。

关于php符号表:其实我的理解是,运行中所有变量名称都记录在里面,php来维护,具体的数据当然是存储在内存中,php就是根据这个符号表去回收没有用到的变量空间的,释放内存空间)。去看看php的垃圾回收机制(释放不再使用的内存空间),就是根据符号表进行的。

来源地址:https://blog.csdn.net/2301_78064339/article/details/131341233

--结束END--

本文标题: php的变量引用与销毁机制

本文链接: https://lsjlt.com/news/387728.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • php的变量引用与销毁机制
    在php中,符号"&"表示引用。 1、看看不引用的情况是这样子: $a = "hello world";//定义一个变量,下面赋值给$b$b = $a;//这一步没有在$a之前加符号&,像这样子"$b= & $a"。没有加&,实际上原理是...
    99+
    2023-09-01
    php 开发语言
  • python变量'创建,引用,销毁'
    创建: 当python变量’赋值’时,根据值类型创建变量,如:a=1 引用: 当参数被引用,python引用计数器自增1 python中列表和字典引用示例 列表: def add_list(p): p+=[3]...
    99+
    2023-01-31
    变量 python
  • php怎么使用函数销毁变量
    小编给大家分享一下php怎么使用函数销毁变量,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在开始文章之前,我们先来看一下什么是变量的销毁。PHP的变量或对象的销毁可以分成显式销毁和隐式销毁:显式销毁,当对象没有被引用时就会...
    99+
    2023-06-20
  • PHP中怎么利用 unset()函数销毁变量
    这篇文章将为大家详细讲解有关PHP中怎么利用 unset()函数销毁变量,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。PHP unset()函数是用来销毁变量的,但很多时候,这个函数只把变量...
    99+
    2023-06-17
  • php销毁变量的2种方法是什么
    本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑PHP的变量或对象的销毁可以分成显式销毁和隐式销毁:显式销毁,当对象没有被引用时就会被销毁,所以我们可以unset或为其赋值NULL; 隐式销毁,PHP是脚本语言,在代...
    99+
    2017-09-22
    php 销毁变量
  • golang函数类型的动态创建与销毁机制
    go 语言提供了 func 类型进行函数值动态创建和销毁:创建:使用 func 关键字动态创建函数类型,如 f := func(x int) int { return x * x }。调...
    99+
    2024-04-28
    动态创建 销毁机制 golang 作用域
  • Python列表创建与销毁及缓存池机制
    目录列表的创建列表的销毁小结列表的创建 创建列表,Python底层只提供了唯一一个Python/C API,也就是PyList_New。这个函数接收一个size参数,允许我们在创建一...
    99+
    2024-04-02
  • C++ 函数内存分配和销毁与垃圾回收机制的比较
    c++++ 使用函数内存分配和销毁,即显式管理内存分配和释放,而垃圾回收机制自动处理这些操作,避免内存泄漏但可能降低效率。 C++ 函数内存分配与销毁与垃圾回收机制的比较 简介 内存管...
    99+
    2024-04-22
    c++ 内存管理 python 垃圾回收器
  • PHP常量和变量之变量引用的示例分析
    小编给大家分享一下PHP常量和变量之变量引用的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!关于PHP常量和变量之变量引用分别写两段代码,如下所示:<php$fo =8;//$fo的值为8,将8赋值...
    99+
    2023-06-15
  • PHP 通过引用与通过值传递变量
    在 PHP 中,我们可以通过两种不同的方式将变量传递给函数:按值和按引用。 了解这两种传递变量的方法之间的区别对于编写高效且有效的 PHP 代码很重要。 按值传递变量 默认情况下,PHP 按值将...
    99+
    2024-02-27
  • PHP 变量通过引用传递
    变量默认按值传递给函数,但在 PHP 中也可以通过引用传递。本文演示如何在 PHP 中通过引用传递。 PHP 变量通过引用传递 & 符号 & 将添加到变量参数的开头,以便在 PH...
    99+
    2024-02-27
  • php变量的引用赋值使用方法
    这篇文章主要讲解了“php变量的引用赋值使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php变量的引用赋值使用方法”吧!说明引用赋值,使用这种赋值方法意味着新的变量引用原始变量,改变...
    99+
    2023-06-20
  • python 全局变量引用与修改
    一、引用使用到的全局变量只是作为引用,不在函数中修改它的值的话,不需要加global关键字。如:输出结果:可以看出,无论是列表还是变量,都是可以直接引用的。二、修改使用到的全局变量,需要在函数中修改的话,就涉及到歧义问题,如:输出结果:可以...
    99+
    2023-01-31
    全局变量 python
  • PHP 函数的静态变量机制是什么?
    php 函数的静态变量机制允许变量在函数调用之间保留其值,从而实现以下功能:保留函数调用之间的状态。避免创建重复的变量。简化代码。 PHP 函数的静态变量机制 简介 静态变量是一种特殊...
    99+
    2024-04-10
    php 静态变量 作用域
  • PHP字符串中引用变量问题
    php中字符串引用变量主要是数据库操作字符串的不同1,普通字符串引用变量    a.外层必须引用双引号    b.字符串中的变...
    99+
    2024-04-02
  • PHP注销当前会话的一个全局变量
    ...
    99+
    2024-04-02
  • PHP 函数的参数传递方式与引用变量之间的关系?
    在 php 中,函数的参数传递方式决定了函数对变量的访问方式。按值传递创建变量副本,而按引用传递则直接操作原始变量。php 8 引入了引用类型提示,允许明确指定按引用传递的参数。按值传递...
    99+
    2024-04-15
    php 参数传递
  • 2011-10-14 对变量的引用
    http://www.itpub.net/thread-1499223-5-1.html 46 楼 星期一我写了这个存储过程: CREATE OR REP...
    99+
    2024-04-02
  • php中变量与常量的区别是什么
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑什么是php常量?所谓常量就是不能改变的量,PHP 中常量一旦被定义,就不能被修改或取消定义。PHP 常量通常用来存储一个不被改变也不希望变化的数据,该数据只能是四种标...
    99+
    2022-03-30
    php 变量 常量
  • PHP中$_GET与$_POST变量的使用与区别是什么
    这篇文章主要讲解了“PHP中$_GET与$_POST变量的使用与区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中$_GET与$_POST变量的使用与区别是什么”吧!在之前的文...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作