前回、関数について書きましたが、関数には
便利な機能があります。関数を呼びだすときに、
呼び出し元から関数内に情報(値)を渡して
その値に応じた処理を行う
ことができます。関数に渡す情報を引数(argument)と
いい、下記のようにかきます。
function msg($product){
echo "{$product}を";
echo "お買い上げ有難うございます。
";
}
msg()関数は、呼び出し元から呼ばれるときに、関数内の値をひとつ
渡すように定義しています。関数内の()内に書いた「$product」が、
引数と呼ばれていて、引数productは、この関数内に限り
使用することができます。
変数$product(引数)は、関数が呼びだれたときにハコが用意され、
呼び出し元から渡される値が格納されます。なので、
変数$product(引数)は関数内で
利用することができるようになっています。
サンプルコードの実行結果はこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> <link rel="stylesheet" href="../style.css"> </head> <body> <?php //引数 りんご を渡している msg("りんご"); //引数 バナナ を渡している msg("バナナ"); $food = "ぶどう"; //引数 $foodの値を渡している msg($food); function msg($product){ // $product はこの関数ブロック内だけ使用可能 echo "商品:{$product}を"; echo "お買い上げ有難うございます。<br>"; } ?> </body> </html> |
サンプルコードで確認できますが、関数を呼びだすたびに、
渡した引数に応じた値が出力がされています。
このように、同じ関数でも渡した引数の値によって異なる
処理を行うことができ、柔軟な処理を行うことができます。
関数本体で定義されている引数(変数)を仮引数(parameter)と
呼んでいます。一方で、関数の呼び出し元から渡される引数を実引数と
呼んでいます。
今回はmsg("りんご")のように、文字列を渡しましたが、
msg($product)のように実引数を変数とすることもできます。
また、
実引数の変数名と仮引数の変数名は同じでなくてもいいです。
値渡しと参照渡し
値渡し:呼び出し元の変数と呼び出し先の変数が異なるものです。
そのため、msg()の中で、$productに「もも」と代入しても
元の変数$foodの値が、「ぶどう」から「もも」に変更はされません。
仮引数に「&」をつけておくと、呼び出し元の変数の値ではなく、
その場所が渡され、呼び出し先と呼びだし元の変数は同じものを指します。
そのとき、
呼び出し先で変数の値を変更すると、
呼び出し元の変数の値を変更されます。
この方法を参照渡し(by reference)といいます。