ソフト開発塾

KONDO-NETサーチ(KLSH)
- 新着 - VB - VC - Perl - PHP - カテゴリに登録 -

PHPちょっとメモ:リファレンスのテスト(変数編)

リファレンス、C言語のポインタのようなもので、C言語のポインタで挫折している人にはむつかしいかもしれない。
PHPのリファレンスの挙動を次のテスト(チェック)プログラムを用意した。
<?php
	error_reporting(E_ALL);

	test_reference();
function test_reference(){
	$ar_data['A'] = 'TEST_A_0';
	$ar_data['B'] = 'TEST_B_0';
	$mm_a = 'A0';
	$mm_b = 'B0';

	echo 'No00.['.$mm_a.']['.$ar_data['A'].']['.$mm_b.']['.$ar_data['B'].']'.PHP_EOL;
//	No00.[A0][TEST_A_0][B0][TEST_B_0]

	$ar_data['A'] = & $mm_a;
	$mm_b = & $ar_data['B'];

	echo 'No01.['.$mm_a.']['.$ar_data['A'].']['.$mm_b.']['.$ar_data['B'].']'.PHP_EOL;
//	No01.[A0][A0][TEST_B_0][TEST_B_0]

	$ar_data['A'] = 'TEST_A_2';
	$ar_data['B'] = 'TEST_B_2';

	echo 'No02.['.$mm_a.']['.$ar_data['A'].']['.$mm_b.']['.$ar_data['B'].']'.PHP_EOL;
//	No02.[TEST_A_2][TEST_A_2][TEST_B_2][TEST_B_2]

	$mm_a = 'A3';
	$mm_b = 'B3';

	echo 'No03.['.$mm_a.']['.$ar_data['A'].']['.$mm_b.']['.$ar_data['B'].']'.PHP_EOL;
//	No03.[A3][A3][B3][B3]

	$ar_data = array('A' => 'TEST_A_4','B' => 'TEST_B_4');

	echo 'No04.['.$mm_a.']['.$ar_data['A'].']['.$mm_b.']['.$ar_data['B'].']'.PHP_EOL;
//	No04.[A3][TEST_A_4][B3][TEST_B_4]

	$mm_a = 'A5';
	$mm_b = 'B5';

	echo 'No05.['.$mm_a.']['.$ar_data['A'].']['.$mm_b.']['.$ar_data['B'].']'.PHP_EOL;
//	No05.[A5][TEST_A_4][B5][TEST_B_4]

	$ar_data['A'] = 'TEST_A_6';
	$ar_data['B'] = 'TEST_B_6';

	echo 'No06.['.$mm_a.']['.$ar_data['A'].']['.$mm_b.']['.$ar_data['B'].']'.PHP_EOL;
//	No06.[A5][TEST_A_6][B5][TEST_B_6]

	$mm_a = & $mm_b;

	echo 'No07.['.$mm_a.']['.$ar_data['A'].']['.$mm_b.']['.$ar_data['B'].']'.PHP_EOL;
//	No07.[B5][TEST_A_6][B5][TEST_B_6]

	$mm_a = 'A8';

	echo 'No08.['.$mm_a.']['.$ar_data['A'].']['.$mm_b.']['.$ar_data['B'].']'.PHP_EOL;
//	No08.[A8][TEST_A_6][A8][TEST_B_6]

	$mm_b = & $ar_data['B'];
	$ar_data['A'] = & $mm_a;

	echo 'No09.['.$mm_a.']['.$ar_data['A'].']['.$mm_b.']['.$ar_data['B'].']'.PHP_EOL;
//	No09.[A8][A8][TEST_B_6][TEST_B_6]

	$mm_a = 'A10';

	echo 'No10.['.$mm_a.']['.$ar_data['A'].']['.$mm_b.']['.$ar_data['B'].']'.PHP_EOL;
//	No10.[A10][A10][TEST_B_6][TEST_B_6]
}
No01.の結果は、リファレンスが分からなくても、なんとなく想像できる。
No02.No03.の結果が、PHPの特徴になる。C言語のポインタと同じ考え方をすると意味不明になる。
No04.の結果は、なんとなく想像できる。
No05.の結果が、意味することは...
No06.の結果とNo05.の結果から、No04.によって、リファレンスが無効になっている。(リファレンスの解除)
No07.の結果は、なんとなく想像できる。
No08.の結果は、No02.No03.の結果と同じ
No09.の結果は、なんとなく想像できるのだが...
No10.の結果は、No09.の$mm_b = & $ar_data['B'];によって、No07.の$mm_a = & $mm_b;が、無効になっている。(リファレンスの解除)
ちょっとしたテスト

ソフト開発塾 前のページへ戻る

---KONDO-NET.GR.JP---
今日のアクセス人目