Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PHP中的对象赋值

PHP中的对象赋值
EN

Stack Overflow用户
提问于 2012-10-19 08:05:21
回答 7查看 4.5K关注 0票数 8

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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);
?>

输出结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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?非常感谢!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-10-19 08:10:09

$reference指向$instance,该值本身是对对象的引用。因此,当您更改$instance包含的值时,$reference会反映此更改。

另一方面,$assigned$instance值的副本,并且独立地指向$instance引用的对象本身。因此,当值$instance被更新为指向nothing (即null)时,$assigned不会受到影响,因为它仍然指向对象,并且不关心$instance的内容。

票数 7
EN

Stack Overflow用户

发布于 2012-10-19 08:08:16

设置$instance = null;不会更新$assigned,因为它不会更新$instance指向的位置的数据。相反,它正在修改$instance指针本身,以便指针不再指向与$assigned相同的数据。

票数 4
EN

Stack Overflow用户

发布于 2012-10-19 08:11:32

一个对象是内存中的一个独立实体,它可以有一个或多个引用。如果它的值为0,就会被垃圾回收。

包含对象的变量实际上指向(引用)该对象。所以当你这样做的时候:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$var1 = new Object();
$var2 = $var1;

您只需创建两个指向同一对象的变量($var2复制$var1的值,但该值是对该对象的引用)。

如果您随后编写$var1 = null,您将删除该引用,但$var2仍然指向该对象。

&运算符实际上返回对其后面的变量的引用,因此当您编写

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$var1 = &var2;

那么$var1不会同时指向$var2所指向的对象,但是$var1会指向$var2本身。因此,当您将$var2设为null时,$var1将指向相同的null。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12969941

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文