ホームページ  >  記事  >  バックエンド開発  >  PHP参照変数の知識を詳しく解説

PHP参照変数の知識を詳しく解説

不言
不言オリジナル
2018-04-28 13:45:232438ブラウズ


この記事では、主に PHP の参照変数に関する詳細な知識を紹介します。必要な友達に参照してもらいます。 コンセプト: PHP における参照とは、別の名前を使用することを意味します。同じ変数の内容にアクセスします。

  • 定義メソッド: PHP は参照変数を定義するために '&' を使用します。

  • 参照が使用されない場合、変数はコピーオンライトメカニズム (COW) を採用します。書き込み 印刷されると、変更のためにメモリのコピーがコピーされます。たとえば

  • //定义一个变量
    $a = range(0,1000);
    var_dump(memory_get_usage()); //打印内存使用量
    //定义一个变量b
    $b = $a; //此时$b和$a 指向同一个内存空间
    var_dump(memory_get_usage());
    //当a或b发生写入时,才会复制一块内存进行修改
    $a = range(0,1000);
    var_dump(memory_get_usage());
  • 実行結果: メモリ使用量は 1 回目と 2 回目の印刷では同様ですが、3 回目では大幅な変化があります。が書き込み操作を実行すると、メモリ使用量の複製が発生したことを示します。

参照が使用される場合、変数は同じメモリ空間を指し、書き込み操作中に変更されません

    //定义一个变量
    $a = range(0,1000);
    var_dump(memory_get_usage()); //打印内存使用量
    //定义一个变量b
    $b = &$a; //将a的空间赋值给b,a与b指向同一空间
    var_dump(memory_get_usage());
    //当a或b发生写入时,内存不会发生复制
    $a = range(0,1000);
    var_dump(memory_get_usage());
  • 実行結果: メモリは大幅に変更されていません

検証のためにzval変数コンテナを渡しました

//通过zval变量容器打印
$a = range(0,3);
xdebug_debug_zval('a');//打印 指向内存空间的变量数,和是否被引用
$c =&$a;
xdebug_debug_zval('a');
$c = range(0,3);
xdebug_debug_zval('a');

実行結果:

cに書き込むとき、メモリを指す変数がまだ2つあり、コピーオンライトは発生しません


unset は逆参照のみを行い、スペースは破壊しません

  • PHP では、オブジェクト自体は参照によって渡され、参照記号を使用する必要はありません

  • class Person{
        public $name  = "zhangsan";
    }
    $p1 = new Person();
    xdebug_debug_zval('p1');
    
    $p2 = $p1;
    xdebug_debug_zval('p1');
    
    $p2->name = "lesi";
    xdebug_debug_zval('p1');
関連する推奨事項:


php 参照定義と参照渡しパラメータの使い方の詳しい説明

以上がPHP参照変数の知識を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。