関数の引数の参照渡し

関数は、引数を、参照渡しで、受け渡すことができる。

通常の値渡しで、引数に変数を指定し受け渡しするときは、関数の内部で仮引数の変数の値を変更しても、関数の呼び出し(コール)時に実引数に指定した変数の値は変更されない。これに対し、参照渡しで、引数に変数を指定し受け渡しするときは、関数の内部で仮引数の値を変更すると、関数の外部の実引数に指定した変数の値も変更される。

使い方

関数の引数の参照渡しは、関数の定義における仮引数の変数名の前に、アンパサンド&を付加する。

定義

function 関数名( &仮引数 ) {
    関数内処理文
}

関数を呼び出す際に「実引数」に指定した値を、「仮引数」で受け取り、関数内の処理文中で使うことができる。関数内の処理文中で、仮引数の値を変更すると、呼び出し(コール)時に実引数に指定した変数の値も変更される。

呼び出し(コール)

関数名( 実引数 );

関数に渡したい値を、「実引数」に指定することができる。実引数は、カンマ「,」で区切り、複数指定することもできる。

サンプル

ひとつの引数の参照渡し

引数がひとつだけの参照渡しのサンプル。

<?php
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}%, ";
?>

↓↓↓出力結果↓↓↓

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}, ";
}
?>

↓↓↓出力結果↓↓↓

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>';
}
?>

↓↓↓出力結果↓↓↓

blue: 青色
red: 赤色
yellow: 黄色

スポンサード リンク

カテゴリー: PHP, ユーザー定義関数 タグ: パーマリンク