PHP講座入門

関数

関数とは?

 「また難しいものが出てきた…」と思ったでしょうか。そんなに難しいことはありませんよ。要するに今まで考えてきた制御構造などの文をひと固まりにして再利用できるようにしてものです。また、関数の中は別世界になる、というのも特徴です。

 どのように書くのでしょうか。

function 関数名([引数]) { 文; }
 関数名  変数と同じように名前を付けることができます。大文字と小文字を区別しません。同じ名前を使うことはできません。
 [引数] 「ひきすう」と読みます。関数内の文に値を渡すために、変数を定義します。省略も可能です。カンマで区切って複数個指定できます。

 では実際にどのように書くか見てみましょう。

<?php
// 定義
function func_a() {
	echo 'this is test.<br>';
}

function func_b($name) {
	echo $name."さん、こんにちは!<br>";
}

// 呼び出し
func_a();
func_b('佐藤');

 結果は

this is test.
佐藤さん、こんにちは!
 となります。定義と呼び出しが前後しても問題ありません。

 func_a は引数がありませんので、呼び出すとき、func_a() となります。

 func_b は引数があります。これは、$nameに'佐藤'を代入してから、関数内に入って行くことと同じです。こんなイメージです。

<?php
function func_b() {
	$name = '佐藤';
	echo $name."さん、こんにちは!<br>";
}
func_b();

 

 また、関数内は別世界(スコープ)になります。どういう意味でしょうか。ちなみに、世界=スコープという訳は、わたしが勝手に分かりやすいように付けただけです。

 例を見てみましょう。

<?php
function func_c() {
	$name = '佐藤';
	echo $name."さん、こんにちは!<br>";
}

$name = '鈴木';
func_c();
echo $name."さん、こんにちは!<br>";

 結果は

佐藤さん、こんにちは!
鈴木さん、こんにちは!

 となります。この例からも分かるように6行目で $name'鈴木' になっています。func_c を実行すると、$name'佐藤' が入っているように思いますが、それは関数内だけ別世界(スコープ)なので、関数外には影響を与えません。それで8行目の $name'鈴木' のままという訳です。

 関数内でも、関数外の変数を使いたい、ということがあると思います。その場合、globalキーワードを使います。

<?php
function func_c() {
	global $name;
	echo $name."さん、こんにちは!<br>";
}

$name = '鈴木';
func_c();

 結果は

鈴木さん、こんにちは!

 となります。関数外の変数の定義が関数内にも適用されていることが分かると思います。

 

 では、関数の引数と、変数の名前がダブってしまったらどうなるんでしょうか。結論から言いますと、関数内は別スコープであるというのは引数にも当てはまります。少し上に書きましたが、引数の代入が関数内で行なわれているイメージです。

<?php
function func_c($name) {
	echo $name."さん、こんにちは!<br>";
}

$name = '鈴木';
func_c('佐藤');
echo $name."さん、こんにちは!<br>";

 結果は

佐藤さん、こんにちは!
鈴木さん、こんにちは!

 となります。

返り値

 関数内は別スコープなので、そのままでは計算結果などを関数外に持ち出すことができません。関数外に結果を知らせたい時に、返り値を使います。そのための命令が、return です。

 return返り値を外部に渡すのと同時に関数を終了させます。よって、制御構造にもなる、ということになります。例を見てみましょう。

<?php
function get_hello($name) {
	return $name . 'さん、こんにちは!<br>';
}

echo get_hello('佐藤');

 結果は

佐藤さん、こんにちは!

 となります。もう少し複雑にしてみましょう。男性なら「くん」付け、女性なら「さん」付けにしてみます。

<?php
function get_hello($name, $gender) {
	if ($gender == '女') {
		return $name . 'さん、こんにちは!<br>';
	}
	elseif ($gender == '男') {
		return $name . 'くん、こんにちは!<br>';
	}
	else {
		return '';
	}
	echo "ここは実行されません。";
}

echo get_hello('佐藤', '男');

 結果は

佐藤くん、こんにちは!

 となります。関数内の12行目が実行されていません。7行目の return で関数が実行を終了しているからです。

 もし関数が何も return しなかったら何が返り値になるのでしょうか。それは、NULL という値が返ってきます。これは言わば「なんでもない」という値の型です。NULL の概念は分かりづらいので、後々考えようと思います。

 

その他の関数

 今まで考えたのは、利用者が作成するユーザー定義関数という種類の関数です。その他に3つ種類の関数があります。

 可変関数と無名関数は、もし後で出てきたら説明しようと思います。

 この内部関数というのが最もよく使い、また無くてはならないものです。PHPのプログラムは、この内部関数と制御構造、ユーザー定義関数の組み合わせ作られます。

 どんなものがあるのでしょうか。ここで説明できないくらい無数にあります。次の章からこの内部関数などを組み合わせてプログラムを作っていこうと思います。楽しみにしてください! ちなみに、どんなものがあるのかは、マニュアルで参照することができます。

 

目次

×