首先,对于这个愚蠢的问题感到抱歉,但是我正在阅读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);
?>
Run Code Online (Sandbox Code Playgroud)
这输出:
NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(30) "$assigned will have this value"
}
Run Code Online (Sandbox Code Playgroud)
$ instance和$ reference指向同一个地方,我得到了这个,我理解为什么我们为它们获取NULL和NULL.
但是分配了什么呢?它还指向存储$ instance的地方?为什么我们使用$instance->var它会影响$ assigned,但是当我们将$ instance设置为null时,$ assigned没有变化?
我认为所有三个变量都指向记忆中的一个位置,但显然我错了.能否请您解释一下究竟发生了什么以及$分配了什么?非常感谢你!
$reference指向值的$instance,它本身就是一个对象的引用.因此,当您更改包含的值时$instance,会$reference反映此更改.
$assigned另一方面,是一个值的副本$instance,并且独立地指向$instance所指的对象本身.因此当值$instance更新为指向空(即null)时,$assigned不会受到影响,因为它仍然指向对象,而不关心内容$instance.
| 归档时间: |
|
| 查看次数: |
3954 次 |
| 最近记录: |