php 赋值
2021/8/26 17:36:15
本文主要是介绍php 赋值,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
php赋值
普通赋值
通过=
进行赋值。
对于数字,字符串,布尔值,null,数组等,用=
将原变量的值拷贝到新变量中(传值赋值),所以改变其中一个并不影响另一个。
但是对于对象,用=
赋值,不是拷贝,而是对对象的引用(也不是引用赋值,类似于js中的对象赋值)。
例子
// php 版本5.6.9 $a = 123; $b = $a; $a = 456; print $b; // 123 $aa = array( 0 => 123); $bb = $aa; $aa[0] = 456; print $bb[0]; // 123 // 对象赋值 -- 使用php手册中的例子 class SimpleClass {} $instance = new SimpleClass(); // new 操作符返回的是对所创建对象的引用 $assigned = $instance; // 普通赋值 $reference =& $instance; // 引用赋值 $instance->var = '$assigned will have this value'; $instance = null; // $instance and $reference become null. 改变$instance的值,$assigned的值并没有变化,所以对象的普通赋值不能说就是引用赋值。$reference的赋值才是真正的引用赋值:改变$instance的值,$reference的值跟着变。 var_dump($instance); // null var_dump($reference); // null var_dump($assigned); // SimpleClass 对象
对于对象的赋值可以这么理解:
首先,将PHP中的变量看成是一个一个的数据槽。这个数据槽可以保存一个基本类型(int、string、bool等)。创建引用时,这个槽里保存的是内存地址,或者说是指向引用对象的一个指针,引用没有拷贝操作,仅仅是将指针指向了原变量(参考数据结构)。创建普通赋值时,则是拷贝的基本类型。
而对象则与基本类型不同,它不能直接保存在数据槽中,而是将对象的“句柄”保存在了数据槽。这个句柄是指向对象特定实例的标识符。虽然句柄不是我们所能直观操作的类型,但它也属于基本类型。
当你获取一个包含对象句柄的变量,并将其分配给另一个变量时,另一个变量获取的是这个对象的句柄。(注意,不是引用!不是引用!不是引用!!)。通过句柄,两个变量都可以修改同一个对象。但是,这两个变量并没有直接关系,它们是两个独立的变量,其中一个变量修改为其他值时,并不会对另一个变量产生影响。只有该变量在修改对象内部的内容时,另一个变量因为持有相同的句柄,所以它的对象内容也会相应地发生改变。
php官方手册中关于对象和引用的解释。
引用赋值
使用=&
进行引用赋值。
php手册的例子:
// php 版本5.6.9 $a = 3; $b = &$a; // $b 是 $a 的引用 print "$a\n"; // 输出 3 print "$b\n"; // 输出 3 $a = 4; // 修改 $a print "$a\n"; // 输出 4 print "$b\n"; // 也输出 4,因为 $b 是 $a 的引用,因此也被改变
这篇关于php 赋值的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-19php8的协程和hyperf的协程有什么区别?-icode9专业技术文章分享
- 2024-12-19php8 的fiber是什么?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-11-29使用PHP 将ETH账户的资产汇集到一个账户
- 2024-11-23怎么实现安卓+php 热更新方案?-icode9专业技术文章分享
- 2024-11-22PHP 中怎么实现判断多个值是否为空、null 或者为 false?-icode9专业技术文章分享
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享