• 締切済み

PHP5で

PHP5で $a = array("a"); $b = $a; とした時に、$bは $aの深い?コピー(別の入れ物で中身が同じ)でしょうか? それとも浅いコピー $aの参照でしょうか? 深いコピー、浅いコピーの概念をあまり理解せず、上のように言葉を使いましたが それでよいでしょうか? PHPではクラス?で出てくる概念でしょうか?・・・わからないことだらけです。 あと、確かめる方法ですが、私はよく var_dumpを使いますがこれは 中のデータを表すだけで、$aのアドレス? $bのアドレスなど調べる方法が わかりません。 入れ物自体の詳細を知る方法はありますか?

みんなの回答

  • okwabaka
  • ベストアンサー率15% (11/73)
回答No.3

PHP5の場合変数は#1,#2のとおりですが オブジェクトの場合は「=」は参照渡しになりますから注意する必要があります。

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

PHPの場合、普通の代入は配列であっても深いコピーになり、 浅いコピー(参照の代入)は=&を使用します。 $a = array("a"); $b = $a; $a[0] = "A"; print "a[0]=".$a[0].", b[0]=".$b[0]."\n"; $a = array("a"); $b =& $a; $a[0] = "A"; print "a[0]=".$a[0].", b[0]=".$b[0]."\n"; これを実行すると、前者は、$aへ代入しても$bの内容は変わらず、結果は a[0]=A, b[0]=a となり、後者の方は、$aも$bも同じ配列を指しているため、$aへの代入によって$bも変わり、結果は a[0]=A, b[0]=A になります。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

$bに$aを代入すれば、同値ですね 変数の比較をするときは微妙ですが・・・ <? $a = array(0=>"a",1=>"b"); $b = array(1=>"b",0=>"a"); $c = $a; if($b == $a) print "ok1"; if($b === $a) print "ok2"; if($c == $a) print "ok3"; if($c === $a) print "ok4"; ?> ちなみに参照コピーの場合はこんな感じ <? $x=Array("x"); $y=&$x; $y[0]="y"; print_r($x); ?>