PHP:& $这意味着什么?

时间:2014-11-22 11:53:47

标签: php reference

在我查看PHP源代码以查找已弃用的调用时间引用时,我在第三方代码中发现了以下两件事:

#1
$x = array(&$this, $a, $b);

#2
&$this->foo();

我知道&用于标记引用。但这对我没有意义。

重新开始。 #1:当我使用array($this)时,数组中是否也没有保存引用?

重新开始。 #2:当我调用自己实例的foo()时,为什么需要使用$this作为参考?

4 个答案:

答案 0 :(得分:3)

我想这段代码来自PHP4时间。

#1 - 在PHP 4中使用array($this)表示与PHP 5中的array(clone($this))相同,即您获得对象的副本。在大多数情况下,您希望获得相同的对象,而不是它的副本。所以我想原作者正是因为这个原因使用了array(&$this)

#2在手册的Returning References章节中解释

在这种情况下,如果它是&$this或某些&$obj并不重要。实际上,引用适用于从foo()返回的值。例如,如果foo()内部有一个大的static $cache对象并返回其中的一部分,这可能是有意义的。 E.g。

class MyClass {
  function &foo($id){
    static $cache;
    if (!isset($cache[$id])) {
      $cache[$id] = extract_some_object_from_database($id);
    }
    return $cache[$id];
  }
}

注意“& foo”

答案 1 :(得分:1)

这实际上是PHP

通过引用传递的解决方法

我们参考了PHP手册http://php.net/manual/en/language.references.pass.php

中的用法

答案 2 :(得分:1)

因为@ cs1193通过引用传递当前对象。但现在没有意义,因为默认情况下对象是通过引用传递的。所以你创建引用的引用。

$x = array(&$this, $a, $b); // this would be passing reference to reference on current object.

&$this->foo(); //makes pretty no sense. $this is already reference to current object. 

在第二个示例中,您需要通过$ this调用方法,因为PHP不知道您是否要调用类方法或函数。

答案 3 :(得分:1)

您可以通过按值传递或通过引用传递值来传递函数。在传递中,可以在内存中创建可变的新副本,其中只需要复制内存地址。在php&是指通过引用传递。