Php 我能';我不理解下面给定代码的输出 输入: 输出: 无效的 无效的 对象(简单类)#1(1){ [“var”]=> 字符串(30)“$assigned将具有此值” }

Php 我能';我不理解下面给定代码的输出 输入: 输出: 无效的 无效的 对象(简单类)#1(1){ [“var”]=> 字符串(30)“$assigned将具有此值” },php,Php,链接: 请给出足够的解释。为什么$assigned最终给出了该输出。实例不是对象,只是指向该对象的指针,因此assigned是独立的 Input: <?php $instance = new SimpleClass(); $assigned = $instance; $reference =& $instance; $instance->var = '$assigned will have this value'; $instance = null; // $

链接:


请给出足够的解释。为什么$assigned最终给出了该输出。

实例不是对象,只是指向该对象的指针,因此assigned是独立的

Input:
<?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);
?>


Output:
NULL
NULL
object(SimpleClass)#1 (1) {
   ["var"]=>
     string(30) "$assigned will have this value"
}
如果您
var_dump()
$instance->var='$assigned'之后的所有三个变量都将具有此值',您将看到每个变量都有该值

引用指向实例,实例指向对象。将点指定给对象,与实例无关

希望这有帮助

也许会帮助您理解参考资料。 检查第一个示例,尤其是注释

您很容易理解,$reference$instance是“绑定”在一起的,而$assigned不是


希望这有帮助。

让我们从您认为它不应该显示的原因开始,我们可以尝试帮助您理解。因为
$assigned
指向的内存块与
$instance,$reference
指向的内存块不同。清洁一个街区不会清洁另一个街区。谢谢你的解释
$instance = new SimpleClass();  // instance points to instantiated object
$assigned   =  $instance;       // assigned also points to same object
$reference  =& $instance;       // reference points to instance which points to object

$instance->var = '$assigned will have this value'; // all get set with this

$instance = null; // instance and reference no longer point to the object, assigned still does