PHPにおける可変変数と参照割り当ての違いは何ですか?

怪我咯
リリース: 2023-03-10 21:00:01
オリジナル
1244 人が閲覧しました

PHP カーネルの観点から説明しましょう。深く理解していれば完全に理解できます。
PHP 変数は、C 言語 の構造 zval を通じてカーネルに保存されます。まだ習っていません) C、オブジェクトとして理解できます。内部のメンバー変数はすべてクラスのプロパティです。とりあえずこのように理解しましょう)、zval 構造は次のとおりです:

struct _zval_struct {
zvalue_value value; // 存储变量的值
zend_uint refcountgc; //表示引用计数 默认为:1
zend_uchar type; // 变量具体的类型
zend_uchar is_refgc; //表示是否为引用
};
ログイン後にコピー

たとえば、

php コードは次のとおりです:

$a = 10;
$b = $a;
ログイン後にコピー

この時点では、$b には参照がありません。$a の値を $b に代入するだけです。その後、zval 構造体の refcountgc は 2 になり、is_refgc は false のままです。これは、カーネル $a が既にメモリ空間をオープンしているため、$a が $b に割り当てられている場合、$b の値は $a のみを指すため、ピースを再度開く必要がなくなり、参照されていないことを示します。ただし、$b の値が変更されると ($a の値は変更されません)、$b は新しいメモリ空間を開きます。これは、いわゆるコピーオンライトです。カーネルに保存されている

PHP 変数 参照は次のとおりです:

$a = 10;
$b = &$a;
ログイン後にコピー

この時点で、カーネルに保存されている $a の構造は is_refgc true とマークされており、参照を意味し、$a と $b は両方ともポイントします$b=20の場合、$aも20になります


以上がPHPにおける可変変数と参照割り当ての違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート