関数の作り方です。
私の個人的な考え方(?)ですが、関数とは「ひとつもしくは複数の処理に名前を付けて、呼び出されたときに処理を実行するもの」です。
関数のいいところは、同じような処理を繰り返し行う場合に、何度も同じことを書かずに済むことだと思います。
関数は下記のように書きます。
function 関数名(){
処理;
}
helloを表示してみる
とても簡単ですが、下記はHelloを表示するhelloという関数を準備・実行する例です。
<?php
function hello(){
echo "Hello";
}
hello();
?>
関数を呼び出す時は
関数名();
とします。
関数は何度でも呼び出すことができます。
<?php
function hello(){
echo "Hello";
}
hello();
hello();
hello();
?>
関数は呼び出しより先に書くことが一般的ですが、後に書いても大丈夫です。
<?php
hello();
function hello(){
echo "Hello";
}
?>
同じ関数名の関数を複数書いてしまうとエラーになります。
関数名は変数と違って大文字と小文字が区別されないので「hello(){・・・」「Hello(){・・・」「HELLO(){・・・」 これらは全て同じ関数として認識されます。
下記はエラーになりますので、気をつけましょう。
<?php
function hello(){
echo "hello";
}
function Hello(){
echo "Hello";
}
?>
引数を使ってみる
引数とは関数に渡す値のことで、呼び出すときに()の中に書きます。
引数は複数渡すことができます。
関数名(引数1,引数2,・・・);
渡ってきた引数は関数の中で使用することができます。
function 関数名(引数1,引数2,・・・){
処理の中で引数を使用できます。
}
具体的な例として、自分の名前と相手の名前を関数に渡して挨拶文を表示させてみます。
<?php
function greeting($me, $you){
echo $you."さん、こんにちは。<br>\n";
echo "私の名前は".$me."です。<br>\n";
}
greeting("田中", "佐藤");
?>
上記で気をつけたいことは、関数内で使用している変数は関数内だけでしか使えないということです。
下記のように関数内で使用した$meを関数の外で使おうとしても表示されません。
<?php
function greeting($me, $you){
echo $you."さん、こんにちは。<br>\n";
echo "私の名前は".$me."です。<br>\n";
}
greeting("田中","佐藤");
echo $me;
?>
また、「greeting($me, $you){・・・」と書いているのに、引数を渡さなかった場合はエラーとなりますので気をつけましょう。
引数のデフォルト値
引数にはデフォルト値を設定することができます。
下記は、第2引数が渡されてきたらその値を、渡されなかったら「名無しさん」を使用して挨拶を表示する例です。
<?php
function greeting($me, $you = "名無しさん"){
echo $you."さん、こんにちは。<br>\n";
echo "私の名前は".$me."です。<br>\n";
}
greeting("田中");
greeting("田中", "佐藤");
?>
「$you = “名無しさん”」とすることで、引数が渡されなかった時のデフォルト値を設定することができます。
上記を「function greeting($you = “名無しさん”, $me){・・・」として、「greeting(“田中”);」で田中だけを渡すと、田中は$youに代入され、$meが渡ってきていないことでエラーになります。デフォルト値を設定する場合はデフォルト値を設定しない引数の後に書かなくてはいけないことに注意しましょう。
戻り値について
これまでは、echoを使って表示のみを行ってきましたが、関数内で処理した内容をreturnを使って戻す方法について見てみます。
function 関数名(引数1,引数2,・・・){
return 処理;
}
変数 = 関数名(引数1,引数2,・・・);
上記のように戻り値を変数に入れて処理をすることが多いと思います。
具体的な例として、引数として三角形の底辺と高さを渡し、計算結果の面積を変数にいれてechoで表示してみます。
<?php
function menseki($teihen,$takasa){
return ($teihen * $takasa / 2);
}
$answer = menseki(10,5);
echo $answer;
?>