システム開発スクール講座

システム制作やプログラミングの初心者向けシステム開発WEB講座スクール

php参照渡しと代入演算

変数には代入して値を入れることになりますが、代入演算子『=』に『&(アンバサンド)』がついている『=&』なる演算子がありました。


これは参照渡しの演算子になり、通常の代入(コピー)と異なり、同じ値を持つ領域に異なる変数からアクセスできる分だけ演算処理の負荷が軽くなるそうですね。


また、PHP4とPHP5では基本的に代入の処理がことなるようです。具体的な例で理解を深めてみましょう。


【代入と参照渡し】

<?php
class Sample{
var $a = "default";
}

$p = new Sample();

$p -> a = "first";
$b = $p;
$c =& $p;


$b -> a = "second";
echo $p -> a;
echo $b -> a;

$c -> a = "third";
echo $p -> a;
echo $c -> a;

?>


上の場合PHP4ではインスタンス$pを作成して、それぞれ新規の変数$bと$cがありますが、$bがコピーして代入しているので実行すると"$p -> a"と"$b -> a"ではそれぞれ値がことなり、"$p -> a"と"$c -> a"は参照渡しを行っているため、値が同じ"third"として出力されます。


ところがPHP5になると基本的に代入演算子"="が参照渡しになるため、上のソースコードをPHP5の環境で実行すると、"$p -> a"と"$b -> a"ではsecondが、"$p -> a"と"$c -> a"では"third"が出力されます。


php5では代入式ではコピーして新たな領域を作成せず、デフォルトで参照渡しとなるため注意が必要なようです。