6. 関数について
今日は、関数について詳しくご説明いたします。
■関数とは
毎回同じ処理を実行するのに、いちいち同じ記述を書いていたのでは、面倒ですし、
ファイルサイズも大きくなってしまいます。
そこで、処理が同じ場合は、関数という処理をまとめたものを呼び出すだけで
同じ処理を実行します。
呼び出し側は、関数名の 1 行で済むので、開発が非常に楽になります。
■宣言 & 呼び出し方宣言
関数の定義は次のように行います。
function 関数名() {
処理
}
関数名(); // 呼び出し
上のように関数を宣言しただけでは関数の内容は実行されません。メインの処理が
関数を呼び出すことによって初めて実行されます。
関数に変数を渡すこともできます。これを引数と呼びます。
引数の受け取りについては、後述します。
-----------------------------------------------------------------
function syori_A() {
print "A"; // 関数の定義(この時点では実行されません)
}
function syori_B() {
print "B"; // 関数の定義(この時点では実行されません)
}
syori_B(); // 関数の呼び出し(ここで関数が実行されます)
syori_A(); // 関数の呼び出し(ここで関数が実行されます)
-----------------------------------------------------------------
《 出力 》
BA
■関数の終了、値の戻し
関数の実行後、処理の結果を受け取ることができます。
return
returnは、関数を終了して、戻り値として値を呼び出し側に返すことが
できます。
return 命令は実行された時点で呼び出し側に制御が戻ります。
つまり、関数の途中でも条件で"return"が呼び出されると、関数を
終了して、メインの処理に戻ります。
-----------------------------------------------------------------
print sub_A();
functio sub_A() {
return "Hello World\n";
}
-----------------------------------------------------------------
《 出力 》
Hello World
-----------------------------------------------------------------
sub_A();
function sub_A() {
print "This is";
return;
print "Sample"; // returnで関数の処理が終了してしまったため、実行されない
}
-----------------------------------------------------------------
《 出力 》
This is
戻り値がなければ、returnを省略することができます。
■引数の受け取り
関数に引数を渡し、関数内でそれを使った処理ができます。
function 関数名( 引数1, 引数2, ・・・) {
処理
}
関数名( 引数1, 引数2, ・・・); // 呼び出し
このように、関数に渡したい変数を引数として、いくつでも渡すことができます。
-----------------------------------------------------------------
Sub_A ( "Hello" , "World" , "!!" );
function Sub_A($a, $b, $c) {
print $a . $b . $c; // 引数の受け取り
}
-----------------------------------------------------------------
上のサンプルの場合、1 番目の引数に"Hello"、2 番目の引数に"World"、3 番目の
引数に"!!"を渡しています。
受け取り側では、()内に記述した変数に引数が格納されますので、サンプルのように
すれば、$aに"Hello"、$bに"World"、$cに"!!"が入ります。
■関数内の変数
メインの処理の変数名と同じ変数名を、関数内で使用しても、メインの変数には
影響ありません。
-----------------------------------------------------------------
$a = 100;
test();
print $a;
function test() {
$a = 50; // メイン処理と同じ変数名を使用
}
-----------------------------------------------------------------
《 出力 》
100
メインの変数を使用したい場合は、関数内で、globalで宣言します。
-----------------------------------------------------------------
$a = 100;
test();
print $a;
function test() {
global $a;
$a = 50; // メイン処理と同じ変数名を使用
}
-----------------------------------------------------------------
《 出力 》
50
★今日のまとめサンプルプログラム
-----------------------------------------------------------------
<HTML>
<BODY>
<?
sub_A();
$a = 100;
$b = 200;
$c = sub_B($a, $b);
print $c . "<br>";
sub_C();
print "main a = $a<br>"; // 関数内でセットした値は有効にならない (100)
print "main b = $b<br>"; // 関数内でセットした値が有効になる (6)
?>
</BODY>
</HTML>
<?
function sub_A() {
print "This is a test program.<br>";
}
function sub_B($a, $b) {
return $a + $b; // 1番目の引数と2番目の引数の和を返す
}
function sub_C() {
$a = 5; // この関数内のみ有効
global $b;
$b = 6; // この関数内と、この関数内で呼ばれた関数内で有効
}
?>
-----------------------------------------------------------------
■解説
ちょっと分かりにくいかもしれませんが、サンプルを実行して、なぜそういう結果が
表示されるのかを確認してみてください。
他にもいろいろと変更して、どのような結果になるかを試してみてください。
★課題
1. 以下の条件を満たす関数を作成してください。
(1) 2つの引数を受け取り、積(掛け算)の結果を返す関数
(2) 3つの引数を受け取り、引数を全てをprintする関数
(3) 引数を1つ受け取り、値が100以上の場合に、"True"の文字列を返す関数
(4) 2つの引数(整数)を受け取り、2つの引数の値が同じ場合に、"True"の
文字列を返し、違う場合は"False"の文字列を返す関数
★前回の課題の解答
1. 以下のハッシュ配列
$weekday = array(
1=>'Sunday',
2=>'Monday',
3=>'Tuesday',
4=>'Wednesday',
5=>'Thursday',
6=>'Friday');
の配列を作成してから、
7=>'Saturday'
を追加し、HTML中に全て表示してください。
→下のサンプルを参照してください。
2. 以下のキーとデータをハッシュ配列に格納し、HTML中に全て表示してください。
name : しょう
email : searchai@zw.main.jp
address : 東京都渋谷区
tel : 090-6934-9953
→下のサンプルを参照してください。
-----------------------------------------------------------------
<HTML>
<BODY>
<?
// 1の解答例
$weekday = array(
1=>'Sunday',
2=>'Monday',
3=>'Tuesday',
4=>'Wednesday',
5=>'Thursday',
6=>'Friday');
$weekday['7'] = 'Saturday';
foreach ( $weekday as $key => $value ) {
print "$key : $value <br>\n" ;
}
print "<br>";
// 2の解答例
$data = array("name"=>"しょう",
"email"=>"searchai@zw.main.jp",
"address"=>"東京都渋谷区",
"tel"=>"090-6934-9953" );
foreach ( $data as $key => $value ) {
print "$key : $value<br>";
}
?>
</BODY>
</HTML>
-----------------------------------------------------------------
■解説
ここでは、ハッシュ配列は基本的なところだけ抑えておけばOKです。
データベースを扱う時や、リクエストパラメータ(フォームから送られる情報)を
扱う時などに使用します。
ハッシュ配列のデータを、さらに配列にすることで、簡易的なデータベースとして
扱うことができます。
|