PHPの参照(リファレンス)を解除する方法:unset()関数とNULL代入の違いを解説
はじめに
PHPでは、unset()関数を使うことで、変数とその内容との間の参照(リファレンス)の結びつきを解除できます。ここで重要なのは、unset()は変数が指していた内容そのものを破棄するわけではないという点です。unset()が行うのは、あくまで「変数と内容をつなぐリンクを切断する」ことだけです。そのため、同じ内容を参照している他の変数やデータ自体は影響を受けることなく残ります。
unset()で参照を解除する例
以下の例では、まず変数$aへの参照として$bを作成し、その後unset()によって$bの参照を解除しています。
<?php $a = 10; $b = &$a; echo "before unsetting : ", $a, " " , $b, PHP_EOL; unset($b); echo "after unsetting :" . $a . " "; $b = 20; echo $b; ?>
出力結果
unset($b)を実行した後、$bは単なる独立した通常の変数として扱えるようになります。そのため、$bに20を代入しても$aの値は10のまま変わりません。
before unsetting : 10 10 after unsetting :10 20
NULLを代入して参照を解除する方法
参照を解除するもう一つの方法が、変数にNULLを代入することです。この場合も、参照先の元の変数には一切影響がありません。
次の例では、$xへの参照である$yにNULLを代入しています。
<?php $x = 100; $y = &$x; echo "x and y are references ", $x, " " , $y, PHP_EOL; $y = NULL; $x = 200; echo "x: ", $x . " y: " , $y, PHP_EOL; ?>
出力結果
$yにNULLを代入した時点で、$yと$xの間の参照関係は切れます。NULLをechoしても何も出力されないため、2行目の「y:」の後は空になっています。一方、$xは独立した変数なので、200を代入しても正常に動作します。
x and y are references 100 x: 200 y:
まとめ
- unset()は変数と値の結びつきを切断するだけで、値そのものは破棄しない
- 参照を解除された変数は、その後通常の変数として自由に利用できる
- 変数にNULLを代入することでも参照を解除できる
- どちらの方法でも、参照元の変数には影響しない
-
PHPのnext()関数の使い方|配列の内部ポインタを進める方法
next()関数とはPHPのnext()関数は、配列の内部ポインタを次の要素へ進め、進めた先の要素の値を返すための関数です。配列には内部的なポインタが存在し、current()で現在位置の値を取得したり、next()で要素を順番に辿ったりすることができます。構文next(arr)パラメータarr − 操作対象となる配列戻り値next()関数は、成功した場合に配列内の次の要素の値を返します。それ以上要素が存在しない場合はFALSEを返します。使用例以下はnext()関数の基本的な使用例です。<?php $os = array(windows, mac, linux, solaris); e
-
PHPのend()関数とは?使い方と実例をわかりやすく解説
PHPのend()関数は、配列の内部ポインタを最後の要素へ移動させるための関数です。この関数を呼び出すと、内部ポインタが配列の末尾の要素を指すようになり、その要素の値を取得できます。 構文 end(arr) パラメータ arr − 内部ポインタを移動させたい対象の配列を指定します。 戻り値 end()関数は、成功した場合に配列の最後の要素の値を返します。配列が空の場合はFALSEを返します。 使用例 以下は、end()関数を使って配列の最後の要素を取得する基本的な例です。 <?php $os = array(windows, mac, linux, solaris); echo en