广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php数组是不是引用类型
  • 547
分享到

php数组是不是引用类型

2024-04-02 19:04:59 547人浏览 独家记忆
摘要

PHP数组不是引用类型,而是值类型;数组赋值时会创建不同的变量(副本),因此修改另一个变量,并不会影响到数组本身。且php数组传递是值传递;在调用函数时通过将PHP数组作为实参赋给形参,在函数中修改,并不会影响到数组本身,说明此过程中的传递

PHP数组不是引用类型,而是值类型;数组赋值时会创建不同的变量(副本),因此修改另一个变量,并不会影响到数组本身。且php数组传递是值传递;在调用函数时通过将PHP数组作为实参赋给形参,在函数中修改,并不会影响到数组本身,说明此过程中的传递是值传递,数组变量并非指向此数组本身的引用。

php零基础到就业直播视频课:进入学习
程序员必备接口测试调试工具:立即使用

教程操作环境:windows7系统、PHP8.1版、DELL G3电脑

在PHP中,大部分变量类型,如字符串,整型,浮点,数组等都是值类型的,而类和对象是引用类型,在使用的时候,需要注意这一点。

PHP的变量在内存中是这样存储的,变量保存的并不直接是值的内容,而是地址。例如:

$a = 1;

我们看起来,似乎变量$a直接存储了 1 这个值。而实际情况是,PHP解释器创建了变量$a,将值:1 存入内存中的某个地方,再将值的地址存到变量$a中。

需要取值时,先找到变量$a中的地址,再根据地址找到变量的值。

往下看:

echo $a;

会输出1,PHP解释器会这样完成这一样代码:找到$a中存储的地址,根据地址找到存在内存某个地方的值,输出到屏幕。

看似一行简单的代码,流程却是这样的。

再往下看:

$a = 1;
$b = &$a;

这里的变量$b 做了一个有趣的操作,&符号取出了$a变量中存储的地址,并存储到$b变量。

那么,如果使用下面代码:

echo $b;

结果也将是输出1,PHP解释器先取出$b中存储的地址,再根据地址找到值。如果我们做下面的操作:

$a = 2;
echo $b; //输出2

会发现改变$a的值,$b也跟着变了。其实反过来,改变$b的值,$a的值也会跟这变。

到这一步,我们可以确定,变量$a和$b存储了相同的地址,指向的值是一样的。

那么,我们可以得出结论:它们表示的是同一个变量。

进一步总结,可以得出:如果两个变量存储了相同的地址,它们就是同一个变量。

了解了着一些内容,我们开始介绍值类型和引用类型。

我们先看下面的代码:

$a = 1;
$b = $a;
$a = 2;
echo $b; //输出 1

将$a的值赋给$b,改变$a的值后,$b的值依然不变,也就是说$a和$b是两个不同的变量,指向不同的地址。这种赋值时会创建不同的变量的形式我们称之为值类型。

再看:

class User{
 public $name = ‘Tome‘;
}
$a = new User;
$b = $a;
$a->name = ‘Jim‘;
echo $b->name; //输出 Jim

同样将$a的值赋给$b,改变$a后,$b也跟着变了,也就是说$a和$b是同一个变量,指向相同的地址。这种赋值时不会创建新的变量的形式我们称之为引用类型。

php数组 值类型

PHP中数组传递是值传递而非引用传递。

在调用函数时通过将PHP数组作为实参赋给形参,在函数中修改,并不会影响到数组本身。

说明此过程中的传递为值传递,数组变量并非是指向此数组本身的引用,PHP数组本身以值的形式存在,同时形参是对数组的拷贝。

这点与其他一些语言不同(如c、js等)很不相同,值得注意!

示例如下:

$arr = array(
    'name' => 'corn',
    'age' => '24',
);
test_arr($arr);
function test_arr($arr){
    $arr['name'] = 'qqyumidi';
}
print_r($arr); //result: Array ( [name] => corn [age] => 24 )

js代码如下:

var arr = new Array('corn', '24');
test_arr(arr);
function test_arr(arr){
    arr[0] = 'qqyumidi';
}
console.log(arr);  //result:["qqyumidi", "24"]

如果需要对PHP中的值传递使用引用传递效果,可以在形参前面加上取地址符&。

$aa = 100;
test_vars($aa);
function test_vars(&$aa){
    $aa = 200;
}
print_r($aa);   //result: 200
以上就是php数组是不是引用类型的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: php数组是不是引用类型

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php数组是不是引用类型
    php数组不是引用类型,而是值类型;数组赋值时会创建不同的变量(副本),因此修改另一个变量,并不会影响到数组本身。且PHP数组传递是值传递;在调用函数时通过将PHP数组作为实参赋给形参,在函数中修改,并不会影响到数组本身,说明此过程中的传递...
    99+
    2022-09-20
  • php数组是不是基本类型
    这篇文章主要介绍了php数组是不是基本类型的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php数组是不是基本类型文章都会有所收获,下面我们一起来看看吧。php数组不是基本类型,而是复合数据类型。基本类型(标量数...
    99+
    2023-06-30
  • es6 map是不是引用类型
    本篇内容主要讲解“es6 map是不是引用类型”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“es6 map是不是引用类型”吧!map是引用类型;map(集合)是es6新增的一种引用数据类型,表示...
    99+
    2023-07-05
  • php里是不是只有索引数组
    这篇“php里是不是只有索引数组”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php里是不是只有索引数组”文章吧。php不只...
    99+
    2023-06-30
  • 数组是php中的标量类型吗
    数组不是PHP中的标量数据类型,数组是复合数据类型;标量数据类型表示一个标量只能存放一个数据,而数组可以存放多个数据,因此数组不是标量数据类型,复合数据类型允许将多个类型相同的数据聚合在一起,表示为一个实体项。本文操作环境:Windows1...
    99+
    2022-08-08
    php
  • php数组是传值还是引用
    php数组是传值。PHP数组传递是值传递;在调用函数时通过将PHP数组作为实参赋给形参,在函数中修改,并不会影响到数组本身,说明此过程中的传递是值传递,数组变量并非指向此数组本身的引用。本教程操作环境:windows7系统、PHP8版、DE...
    99+
    2023-05-14
    php php数组
  • JavaScript基本数据类型和引用数据类型是什么
    本篇内容主要讲解“JavaScript基本数据类型和引用数据类型是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript基本数据类型和引用数据类...
    99+
    2022-10-19
  • C#基元类型、值类型、引用类型是什么
    这篇文章主要讲解了“C#基元类型、值类型、引用类型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#基元类型、值类型、引用类型是什么”吧!首先了解下什么是基元类型,基元类型是编译器直接...
    99+
    2023-06-17
  • 为什么在PHP中使用索引数组而不是对象数组?JavaScript是否也有类似的选择?
    在PHP中,索引数组和对象数组是两种非常常见的数据结构。索引数组是一个从0开始的整数序列,每个元素都有一个唯一的整数索引。而对象数组则是由对象组成的数组,每个对象都有一个唯一的键值。那么为什么在PHP中使用索引数组而不是对象数组呢?Java...
    99+
    2023-08-09
    索引 对象 javascript
  • es6 map是引用类型吗
    本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。map是引用类型。es6 map在ES6之前,在JavaScript中实现‘键’=>‘值’,也就是我们常说的键值对,是用Object来完成的。但这种...
    99+
    2023-05-14
    ES6 map
  • php array value是不是数组
    这篇文章主要讲解了“php array value是不是数组”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php array value是不是数组”吧!php array value不是数组...
    99+
    2023-07-04
  • php怎么判断值是不是int类型
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php判断值是不是int类型(整型)方法1:使用is_int()函数is_int() 函数用于检测变量是否是整数。如果指定值是整数则返回TRUE,否则返回FALSE。&...
    99+
    2020-03-04
    php 类型检查 int类型 整型
  • Javascript中基本类型和引用类型是什么
    这篇文章给大家分享的是有关Javascript中基本类型和引用类型是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 1.基础类型A. 基础类型有5种,Number,...
    99+
    2022-10-19
  • 云服务器实例类型不是数据类型
    云服务器实例类型不是数据类型。数据类型是用于存储数据的类型,而云服务器实例类型则是将数据存储在服务器上的特定类型。 云服务器实例的类型可能包括多种类型,例如: 数据访问实例:可以是一个独立的程序,它可以访问数据存储在服务器上的实例。 数...
    99+
    2023-10-26
    数据类型 实例 类型
  • PHP 中的数据类型是否能够存储 NumPy 数组?
    PHP 是一种非常流行的编程语言,它被广泛应用于 Web 开发领域。而 NumPy 是 Python 中的一个非常重要的科学计算库,它主要用于处理数组和矩阵等数值计算。那么,PHP 中的数据类型是否能够存储 NumPy 数组呢?本文将对此问...
    99+
    2023-10-02
    数据类型 存储 numpy
  • PHP数组是如何灵活支持多数据类型的
    本文小编为大家详细介绍“PHP数组是如何灵活支持多数据类型的”,内容详细,步骤清晰,细节处理妥当,希望这篇“PHP数组是如何灵活支持多数据类型的”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在PHP中,数组数据结...
    99+
    2023-07-05
  • PHP中什么是索引数组
    在PHP中,索引数组是指以数字为键名(下标)的数组。索引数组的下标(键名)由数字组成,默认从0开始,每个数字对应一个数组元素在数组中的位置,不需要特别指定,PHP会自动为索引数组的键名赋一个整数值,然后从这个值开始自动递增。本教程操作环境:...
    99+
    2022-08-08
    php php数组
  • c#引用类型与值类型的区别是什么
    这篇文章主要讲解了“c#引用类型与值类型的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c#引用类型与值类型的区别是什么”吧!解析:CLR支持两种类型:值类型和引用类型。用Jeff...
    99+
    2023-06-17
  • php数组传递是引用传值吗
    PHP数组传递不是引用传递,而是值传递;在调用函数时通过将PHP数组作为实参赋给形参,在函数中修改,并不会影响到数组本身,说明此过程中的传递是值传递,数组变量并非指向此数组本身的引用。php零基础到就业直播视频课:进入学习程序员必备接口测试...
    99+
    2022-09-20
  • 云服务器实例类型不是数据类型吗
    云服务器实例类型可以包含其他类型,例如文件、块、对象、字节等等。例如,您可以声明一个名为“My Directory”的云服务器实例,它支持以下数据类型: My Directory = "My Directory" 如果您需要定义一个名...
    99+
    2023-10-27
    数据类型 实例 类型
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作