=&安培;操作员,记忆

时间:2013-01-24 12:08:08

标签: php memory reference

我对如何使用&操作员减少记忆。

我能否回答以下问题?

clase C{

  function B(&$a){
       $this->a = &$a; 

       $this->a = $a;

       //They are the same here created new variable $this->a??
       // Or only $this->a = $a will create new variable?  
  }
} 

$a = 1;

C = new C;
C->B($a)

或许我的理解完全错误.....

3 个答案:

答案 0 :(得分:12)

永远不要在PHP中使用引用来减少内存负载。 PHP通过其内部写入机制完美处理。例如:

$a = str_repeat('x', 100000000); // Memory used ~ 100 MB
$b = $a;                         // Memory used ~ 100 MB
$b = $b . 'x';                   // Memory used ~ 200 MB

如果您确切地知道自己在做什么并且功能需要它们,那么您应该只使用引用(这几乎从不,所以你也可以忘掉它们)。 PHP引用很古怪,可能会导致一些意想不到的行为。

答案 1 :(得分:3)

值类型变量只会在它们的值发生变化时被复制,如果你只在你的例子中分配它就不会被复制,内存占用量就像你没有使用过&操作

我建议你阅读这些关于通过引用传递值的文章:

When to pass-by-reference in PHP

When is it good to use pass by reference in PHP?

http://schlueters.de/blog/archives/125-Do-not-use-PHP-references.html

它被认为是微观优化,并且损害了代码的透明度

答案 2 :(得分:3)

  

我对如何使用&操作员减少记忆。

如果你不知道它,你可能不需要它:) &现在没用了,因为在过去的几年中PHP核心有了一些增强功能。通常你会使用&来避免PHP将值复制到为第二个变量分配的内存,而是(简而言之)让两个变量指向同一个内存。

但是现在

  • 无论如何,对象都作为参考传递。他们不会神奇地克隆自己,因为它们被传递给方法;)
  • 当您传递基本类型时,PHP将复制值,除非您更改了变量(copy-on-write)。

总结一下:&的好处已作为核心的特征存在,但没有运营商的丑陋副作用