我无法理解下面给定代码的输出

时间:2018-07-23 13:32:37

标签: php

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"
}

链接:http://php.net/manual/en/language.oop5.basic.php

请以足够的解释答复。为什么$ assigned最后给出该输出。

2 个答案:

答案 0 :(得分:0)

实例不是对象,仅仅是指向对象的指针,因此分配是独立的。

$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

如果var_dump()之后的$instance->var = '$assigned will have this value';都连续三个{{1}},您会看到每个var都有值。

参考指向实例,该实例指向对象。分配的点指向对象,与实例无关。

希望这会有所帮助!

答案 1 :(得分:0)

也许documentation将帮助您理解参考资料。 检查第一个示例,特别是注释。

您可以轻松地理解 $ reference $ instance 是“绑定”在一起的,而 $ assigned 不是。

希望这会有所帮助。