gpt4 book ai didi

php - PHP 中的对象分配

转载 作者:可可西里 更新时间:2023-11-01 12:47:02 25 4
gpt4 key购买 nike

首先,很抱歉这个愚蠢的问题,但我正在阅读 php.net 中的一篇文章我不明白它到底在说什么。

<?php
class SimpleClass
{
// property declaration
public $var = 'a default value';

// method declaration
public function displayVar() {
echo $this->var;
}
}
?>



<?php

$instance = new SimpleClass();

$assigned = $instance;
$reference =& $instance;

$instance->var = '$assigned will have this value';

$instance = null; // $instance and $reference become null

var_dump($instance);
var_dump($reference);
var_dump($assigned);
?>

这会输出:

NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(30) "$assigned will have this value"
}

$instance 和 $reference 指向同一个地方,我明白了,我明白为什么我们为他们得到 NULL 和 NULL。

但是 $assigned 呢?是不是也指向$instance存放的地方?为什么我们使用$instance->var会影响$assigned,而当我们设置$instance为null时,$assigned却没有变化?

我以为三个变量都指向内存中的一个地方,但显然我错了。你能解释一下究竟发生了什么以及 $assigned 是什么吗?非常感谢!

最佳答案

$reference 指向$instancevalue,它本身就是一个对象的引用。因此,当您更改 $instance 包含的值时,$reference 会反射(reflect)此更改。

另一方面,

$assigned$instance 值的副本,并独立指向对象本身$instance 指的是哪个。因此,当值 $instance 更新为指向任何内容(即 null)时,$assigned 不受影响,因为它仍然指向对象,并且不关心 $instance 的内容。

关于php - PHP 中的对象分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12969941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com