関数は、引数を、参照渡しで、受け渡すことができる。
通常の値渡しで、引数に変数を指定し受け渡しするときは、関数の内部で仮引数の変数の値を変更しても、関数の呼び出し(コール)時に実引数に指定した変数の値は変更されない。これに対し、参照渡しで、引数に変数を指定し受け渡しするときは、関数の内部で仮引数の値を変更すると、関数の外部の実引数に指定した変数の値も変更される。
使い方
関数の引数の参照渡しは、関数の定義における仮引数の変数名の前に、アンパサンド&
を付加する。
定義
function 関数名( &仮引数 ) {
関数内処理文
}
関数内処理文
}
関数を呼び出す際に「実引数」に指定した値を、「仮引数」で受け取り、関数内の処理文中で使うことができる。関数内の処理文中で、仮引数の値を変更すると、呼び出し(コール)時に実引数に指定した変数の値も変更される。
呼び出し(コール)
関数名( 実引数 );
関数に渡したい値を、「実引数」に指定することができる。実引数は、カンマ「,」で区切り、複数指定することもできる。
サンプル
ひとつの引数の参照渡し
引数がひとつだけの参照渡しのサンプル。
<?php
function sample( &$var ) {
$var = "こんにちは♪<br />{$var}さん";
}
$var = '太郎';
sample( $var );
echo $var;
?>
function sample( &$var ) {
$var = "こんにちは♪<br />{$var}さん";
}
$var = '太郎';
sample( $var );
echo $var;
?>
↓↓↓出力結果↓↓↓
こんにちは♪
太郎さん
太郎さん
複数の引数の参照渡し
複数の引数の参照渡しのサンプル。
<?php
function sample( &$varA, &$varB, &$varC ) {
$varA = $varA * 100;
$varB = $varB * 100;
$varC = $varC * 100;
}
$varA = 0.3;
$varB = 0.5;
$varC = 0.7;
sample( $varA, $varB, $varC );
echo "{$varA}%, {$varB}%, {$varC}%, ";
?>
function sample( &$varA, &$varB, &$varC ) {
$varA = $varA * 100;
$varB = $varB * 100;
$varC = $varC * 100;
}
$varA = 0.3;
$varB = 0.5;
$varC = 0.7;
sample( $varA, $varB, $varC );
echo "{$varA}%, {$varB}%, {$varC}%, ";
?>
↓↓↓出力結果↓↓↓
30%, 50%, 70%,
配列型の引数の参照渡し
引数が配列型のときの参照渡しのサンプル。
<?php
function sample( $flag, &$varArray ) {
if ( $flag == 'sort' ) {
sort( $varArray );
} elseif ( $flag == 'rsort' ) {
rsort( $varArray );
} else {
shuffle( $varArray );
}
}
$varArray = array( 3, 2, 5, 4, 1 );
sample( 'rsort', $varArray );
foreach ( $varArray as $varValue ) {
echo "{$varValue}, ";
}
?>
function sample( $flag, &$varArray ) {
if ( $flag == 'sort' ) {
sort( $varArray );
} elseif ( $flag == 'rsort' ) {
rsort( $varArray );
} else {
shuffle( $varArray );
}
}
$varArray = array( 3, 2, 5, 4, 1 );
sample( 'rsort', $varArray );
foreach ( $varArray as $varValue ) {
echo "{$varValue}, ";
}
?>
↓↓↓出力結果↓↓↓
5, 4, 3, 2, 1,
連想配列型の引数の参照渡し
引数が連想配列型のときの参照渡しのサンプル。
<?php
function sample( $flag, &$varArray ) {
if ( $flag == 'ksort' ) {
ksort( $varArray );
} else {
krsort( $varArray );
}
}
$varArray = array(
"red" => "赤色",
"yellow" => "黄色",
"blue" => "青色"
);
sample( 'ksort', $varArray );
foreach ( $varArray as $varKey => $varValue ) {
echo '<p>';
echo $varKey . ': ' . $varValue;
echo '</p>';
}
?>
function sample( $flag, &$varArray ) {
if ( $flag == 'ksort' ) {
ksort( $varArray );
} else {
krsort( $varArray );
}
}
$varArray = array(
"red" => "赤色",
"yellow" => "黄色",
"blue" => "青色"
);
sample( 'ksort', $varArray );
foreach ( $varArray as $varKey => $varValue ) {
echo '<p>';
echo $varKey . ': ' . $varValue;
echo '</p>';
}
?>
↓↓↓出力結果↓↓↓
blue: 青色
red: 赤色
yellow: 黄色
red: 赤色
yellow: 黄色