PHPの値渡し・参照渡し

<?php
	
echo '---------------------------<br>';
// 変数。
$a = 0;
var_dump($a); echo '<br>';

function write1($arg)
{
	$arg = 1;
}

write1($a);
var_dump($a); echo '<br>';

write1(&$a);
var_dump($a); echo '<br>';

echo '---------------------------<br>';
// 配列。

$b = array(0);
var_dump($b); echo '<br>';

function write2($arg)
{
	$arg[0] = 2;
}

write2($b);
var_dump($b); echo '<br>';

write2(&$b);
var_dump($b); echo '<br>';

echo '---------------------------<br>';
// オブジェクト。
class Hoge
{
	public $c = 0;
};

$hoge = new Hoge();
var_dump($hoge); echo '<br>';

function write3($arg)
{
	$arg->c = 3;
}

write3($hoge);
var_dump($hoge); echo '<br>';

write3(&$hoge);
var_dump($hoge); echo '<br>';

?>

---------------------------
int(0)
int(0)
int(1)

                                                    • -

array(1) { [0]=> int(0) }
array(1) { [0]=> int(0) }
array(1) { [0]=> int(2) }

                                                    • -

object(Hoge)#1 (1) { ["c"]=> int(0) }
object(Hoge)#1 (1) { ["c"]=> int(3) }
object(Hoge)#1 (1) { ["c"]=> int(3) }

まとめ。
変数を値渡し→値渡し。
配列を値渡し→値渡し。
オブジェクトを値渡し→実際は参照渡し。

ちなみに配列は実際は参照渡しだが、関数内で変更が入った時にコピーされるらしい。
screw-axis.com - このウェブサイトは販売用です! -  リソースおよび情報