関数

トップ > PHP入門 > 関数

目次

広告

関数について

関数とは、何らかの処理を行って、場合によってはその結果を返す処理のまとまりです。PHPには沢山の関数が実装されていますが、これを自分で作ることができます。
プログラム中で何度も実行される処理をまとめておき、必要に応じて呼び出せば、プログラムをすっきりと書くことができます。

関数は function を使用して、以下の書式で作成することができます。

<?php

function 関数名() {
  実装したい処理
}

?>

具体的には以下のようになります。

<?php

function message() {
  echo "メッセージを表示します。";
}

echo "関数を呼び出します。";
message();
echo "関数が呼び出されました。";

?>

このようにすると message という名前の関数が作成されたことになり、message() と書くことで呼び出すことができます。今回は、関数を呼び出すと メッセージを表示します。 と表示されるようにしています。

なお、関数を作成する処理の前に関数を使用しても問題ありません。PHPでは実行前にプログラム全体を解析するため、以下のように書いても問題なく実行できます。

<?php

echo "関数を呼び出します。";
message();
echo "関数が呼び出されました。";

function message() {
  echo "メッセージを表示します。";
}

?>

引数

関数を呼び出す際、関数に任意の値を渡して処理させることができます。

関数に渡される値のことを引数(ひきすう)と呼びます。具体的には以下のようになります。

<?php

function message($string) {
  echo $string;
}

echo "関数を呼び出します。";
message("メッセージを表示します。");
echo "関数が呼び出されました。";

?>

これを実行すると message 関数に メッセージを表示します。 という文字列が渡されます。関数側でこの値を取得するには、関数名後ろのカッコに任意の変数名を書きます。引数で渡された値は、自動的にこの変数に格納されます。(変数の名前は自由に付けることができます。)

引数はコンマで区切って複数渡すこともできます。具体的には以下のようになります。

<?php

function message($string1, $string2, $string3) {
  echo "{$string1}と{$string2}と{$string3}を表示します。";
}

echo "関数を呼び出します。";
message("テスト", "サンプル", "PHP");
echo "関数が呼び出されました。";

?>

これを実行すると message 関数に テストサンプルPHP が渡されます。関数側では、$string1$string2$string3 にそれぞれ格納されます。

つまり、この場合は message 関数を呼び出すと テストとサンプルとPHPを表示します。 と表示されます。

戻り値

関数の実行終了時に、関数から値を返すこともできます。具体的には以下のようになります。

<?php

function average($x, $y) {
  return ($x + $y) / 2;
}

$number = average(2, 4);
echo "2と4の平均は{$number}です。";

?>

これを実行すると、2と4の平均は3です。 と表示されます。average が自作関数で、与えられた2つの数値から平均値を求める関数です。

このように return を使用すると、関数から値を返すことができます。

変数の有効範囲

関数の中で作成した変数は、他の関数の中からアクセスすることができません。また、関数の外で作成した変数にも、関数の中からアクセスすることができません。

具体的な例を挙げると以下のようになります。

<?php

$test = "テスト";

function sample1() {
  $test1 = "テスト1";
  echo $test1;
  echo $test;	//←表示できない
}
function sample2() {
  $test2 = "テスト2";
  echo $test2;
  echo $test1;	//←表示できない
}

echo $test;
echo $test1;	//←表示できない
sample1();
sample2();

?>

$test は関数の外で作成した変数なので、関数内から呼び出すことはできません。また、関数 sample1 の中で作成した $test1 には、関数の外や sample2 の内から呼び出すことはできません。

ある変数が他の関数内などで勝手に書き換えられてしまわないよう、このような仕様になっています。

ローカル変数とグローバル変数

関数の外で作成された変数はグローバル変数と呼ばれます。また、関数の中で作成された変数はローカル変数と呼ばれます。

関数内からグローバル変数にアクセスすることはできませんが、global を使用するとアクセスできるようになります。多用しすぎるとプログラムが解り難くなりますが、上手く利用するとプログラミングが楽になります。

具体的な例を挙げると以下のようになります。

<?php

$test = "テスト";

function sample1() {
  global $test;
  $test1 = "テスト1";
  echo $test1;
  echo $test;	//←globalの影響で表示できる
}
function sample2() {
  $test2 = "テスト2";
  echo $test2;
  echo $test1;	//←表示できない
}

echo $test;
echo $test1;	//←表示できない
sample1();
sample2();

?>

関数 sample1 内にある global $test; により、「$test はグローバル変数である」と宣言しています。これにより、関数 sample1 内から $test にアクセスできるようになります。

なお、一つの関数内から複数のグローバル変数にアクセスしたい場合、

global $test1, $test2, $test3;

このようにコンマで区切って複数指定することができます。