トリッキーな PHP コード

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-13 13:06:25900ブラウズ

奇妙な PHP コード
コードは次のとおりです。

<?php
$data = array('a', 'b', 'c');
foreach ($data as $key => $val) {
    $val = &$data[$key];
}


質問 1: プログラムが実行され、各ループが終了した後の変数 $data の値はいくらですか?説明してください。
質問 2: プログラムの実行後、変数 $data の値はいくらですか?説明してください。

答え:

記事で言及されている配列 $data の完全な式は次のとおりです:
$data = array(
0 => 'a', / / メモリ空間 A
1 => 'b', // メモリ空間 B
2 => 'c', // メモリ空間 C
);

ループ処理:
$ key = 0; $val = 'a'; // $val は変数 $data[0] の値をコピーします。この割り当てにより、変数 $val が作成され、新しいメモリ空間 X を指します。$val と $data[0] は異なるメモリ空間を指します。
$val = &$data[0]; // $val は変数 $data[0] (元の配列の最初のユニット) を直接指す参照になります。 $val と $data[0] は同じメモリ空間 A を指します。
$key = 1; $val = 'b'; // 代入操作により、$val が指すメモリ空間の値が変更されるため、$data は同じメモリ空間を指します。 [0] の値も変更されました。
$val = &$data[1]; // $val は参照のままですが、変数 $data[1] (元の配列の 2 番目の単位) を指します。 $val と $data[1] は同じメモリ空間 B を指します。
$key = 2; $val = 'c'; // 代入操作により、$val が指すメモリ空間の値が変更されるため、$data は同じメモリ空間を指します。 [1] の値も変更されました。
$val = &$data[2]; // $val は参照のままですが、変数 $data[2] (元の配列の 3 番目の単位) を指します。 $val と $data[2] は同じメモリ空間 C を指します。

PHP.net Web サイトの配列、foreach、およびリファレンスの 3 つの章にある関連する手順を参照してください。

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