PHPのリファレンス(参照)とは?基本から実例までわかりやすく解説
はじめに:PHPのリファレンスとは
PHPにおけるリファレンス(参照)とは、同じ変数の内容に異なる名前でアクセスできるようにする仕組みです。C/C++のポインタとは性質が異なり、リファレンスに対して算術演算を行うことはできません。C/C++のポインタが実際のメモリアドレスを指すのに対し、PHPのリファレンスはシンボルテーブル上のエイリアス(別名)にすぎません。
PHPでは変数名と変数の内容は別個のものとして扱われるため、同じ内容に対して複数の名前を付けることが可能です。リファレンス変数を作成するには、元の変数に&記号を付けます。たとえば$b=&$aと書くと、「$bは$aのリファレンスである」という意味になります。
リファレンスによる代入
次の例では、2つの変数が同じ値を参照しています。
コード例
<?php $var1=10; $var2=&$var1; echo "$var1 $var2\n"; $var2=20; echo "$var1 $var2\n"; ?>
実行結果
一方の変数の値を変更すると、その変更がもう一方の変数にも反映されます。
10 10 20 20
リファレンスの注意点
未定義の変数をリファレンスとして代入・受け渡し・返却すると、その変数は自動的に作成されます。また、関数内でglobal宣言された変数にリファレンスを代入した場合、そのリファレンスは関数の内部でのみ有効になる点に注意が必要です。
さらに、foreach文でリファレンス付きの変数に値を代入すると、リファレンスそのものも書き換えられます。
コード例
<?php $arr=[1,2,3,4,5]; $i=&$ref; foreach($arr as $i) echo $i*$i, "\n"; echo "ref = ". $ref; ?>
実行結果
$refには、ループ処理の終了後、配列の最後の要素の値が残ります。
1 4 9 16 25 ref = 5
配列要素をリファレンスにする
次の例では、配列の各要素が、配列の初期化前に宣言された個々の変数へのリファレンスになっています。この場合、配列の要素を変更すると、対応する元の変数の値も連動して変化します。
コード例
<?php $a = 10; $b = 20; $c=30; $arr = array(&$a, &$b, &$c); for ($i=0; $i<3; $i++) $arr[$i]++; echo "$a $b $c"; ?>
実行結果
$a、$b、$cの値もそれぞれインクリメントされていることが確認できます。
11 21 31
-
PHPのfilter_input()関数とは?使い方とパラメータを解説
PHPのfilter_input()関数は、GETやPOSTなど外部から送信された変数を名前で取得し、必要に応じてフィルタリング(検証・サニタイズ)を行うことができる関数です。ユーザー入力を安全に扱うための重要な関数の一つであり、セキュリティ対策の観点からも広く利用されています。構文filter_input(type, var, filtername, options)パラメータtype − チェック対象となる入力の種類を指定します。指定できるのは以下の5種類です。INPUT_GET、INPUT_POST、INPUT_COOKIE、INPUT_SERVER、INPUT_ENVvar − 取得し
-
PHPのextract()関数とは?使い方とパラメータを徹底解説
extract()関数とはPHPのextract()関数は、配列のキーと値を現在のシンボルテーブルに変数としてインポートする関数です。連想配列の各要素が「キー名=変数名、値=変数の値」として展開され、戻り値としては正常に抽出された変数の個数が返されます。構文extract(arr, rules, prefix)パラメータarr − 変数として展開したい対象の配列を指定します。rules − 無効な変数名や既存変数との衝突(コンフリクト)が発生した場合の扱い方を指定します。指定できる値は以下の通りです。EXTR_OVERWRITE − デフォルト値。同名の変数が既に存在する場合、既存の変数を上書