我对如何使用&操作员减少记忆。
我能否回答以下问题?
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)
或许我的理解完全错误.....
答案 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将值复制到为第二个变量分配的内存,而是(简而言之)让两个变量指向同一个内存。
但是现在
总结一下:&
的好处已作为核心的特征存在,但没有运营商的丑陋副作用