2

&operatorを使用してメモリを削減する方法について非常に混乱しています。

以下の質問に答えてもらえますか?

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)

または多分私の理解は完全に間違っています.....

4

3 に答える 3

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 参照は風変わりで、予期しない動作を引き起こす可能性があります。

于 2013-01-24T12:14:08.340 に答える
3

値型変数は、値が変更された場合にのみコピーされます。例でのみ割り当てると、コピーされません。メモリ フットプリントは、& 演算子を使用していない場合と同じになります。

参照による値の受け渡しに関する次の記事を読むことをお勧めします。

PHP で参照渡しを行う場合

PHPで参照渡しを使用するのが良いのはいつですか?

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

これはマイクロ最適化と見なされ、コードの透明性を損ないます

于 2013-01-24T12:14:03.767 に答える
3

& 演算子を使用してメモリを削減する方法について非常に混乱しています。

あなたがそれを知らないなら、おそらくそれを必要としません:)&過去数年間のPHPコアのいくつかの機能強化のために、最近ではまったく役に立ちません。通常&、PHP が 2 番目の変数に割り当てられたメモリに値をコピーすることを回避するために使用しますが、代わりに (要するに) 両方の変数が同じメモリを指すようにします。

でも最近は

  • とにかく、オブジェクトは参照として渡されます。メソッドに渡されるため、魔法のように自分自身を複製しません;)
  • プリミティブ型を渡すと、変数を変更しない限り(コピー オン ライト) 、PHP は値をコピーしません。

要約すると: の利点は&コアの機能として既に存在しますが、オペレーターの醜い副作用はありません。

于 2013-01-24T12:15:29.893 に答える