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 赋值的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程