首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP5对象是通过引用传递的吗?

PHP5对象是通过引用传递的吗?
EN

Stack Overflow用户
提问于 2010-04-27 00:17:18
回答 4查看 35.4K关注 0票数 66

我似乎得不到任何关于这方面的一致信息。不同的来源似乎说了不同的事情,古老的php.net本身(似乎)没有明确地说明这一点-尽管,我必须承认,我只是快速地看了一眼。

在我传递“重”对象的情况下,我需要通过引用传递,但我不想一直输入:

代码语言:javascript
复制
function foo(TypeName& $obj)

如果我能用简单的

代码语言:javascript
复制
function foo(TypeName $obj)

那么标准是怎么说的呢?

EN

回答 4

Stack Overflow用户

发布于 2012-08-08 21:34:07

这不同于仅仅传递一个引用。

http://www.php.net/manual/en/language.oop5.references.php上,列出的示例很不错。在第一个集合中,$a = NULL;不会影响$b,因为$a只是一个指针。在第二个集合中,$c = NULL;会导致$d也为NULL,因为$d是对$c的引用。

代码语言:javascript
复制
<?php
class A {
    public $foo = 1;
}  

$a = new A;
$b = $a;
$a->foo = 2;
$a = NULL;
echo $b->foo."\n"; // 2

$c = new A;
$d = &$c;
$c->foo = 2;
$c = NULL;
echo $d->foo."\n"; // Notice:  Trying to get property of non-object...
?> 
票数 5
EN

Stack Overflow用户

发布于 2010-04-27 00:21:44

从PHP5开始,所有的对象都是通过引用传递和赋值的。

在PHP4中,您仍然需要通过显式地使用&操作符来指定希望通过引用传递对象的位置。

票数 3
EN

Stack Overflow用户

发布于 2014-10-31 02:58:44

这只是一个通过引用传递“对象”很有用的例子:

代码语言:javascript
复制
class RefTest1
{
    public $foo;

    public function __construct(RefTest2 &$ref = null)
    {
        $this->foo =& $ref;
    }
}

class RefTest2
{
    public $foo;

    public function __construct(RefTest1 &$ref = null)
    {
        $this->foo =& $ref;
    }
}

class RefTest3
{
    public $foo;

    public function __construct(RefTest2 &$ref = null)
    {
        $this->foo =& $ref;
    }
}

class DoCrossRef
{
    public $refTest1;
    public $refTest2;

    public function __construct()
    {
        $this->refTest1 = new RefTest1($this->refTest2);
        $this->refTest2 = new RefTest2($this->refTest1);
    }

    public function changeReference()
    {
        $this->refTest1 = new RefTest3($this->refTest2);
    }
}

最后,RefTest1保存对RefTest2的引用,反之亦然,如果在创建RefTest1RefTest2对象还不存在。

在调用DoCrossRef->changeReference()之后,RefTest2对象还保存了对新RefTest3对象的引用。

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

https://stackoverflow.com/questions/2715026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档