STEP 5
14関数を
つかおう
PHPでは関数は大きく分けて2つあります。「PHPで用意されている関数」と
「自分でも作ることができる関数」の2つがあります。
「PHPで用意されている関数」を『組み込み関数』
「自分でも作ることができる関数」を『ユーザー定義関数』といいます。
組み込み関数
関数とは役立つマシンのようなものです。数値や文字を渡すと、求める結果にして返してくれます。関数はたくさんの種類があります。例)変数の中身を表示したい
>> var_dump関数を使います
$data = 100;
var_dump($data);
→ int(100)が表示されます。
例)変数の文字列の長さを知りたい
>>strlen関数を使います
$data = 'abc';
$nagasa = strlen($data);
→ 3 が変数に入ります。
ユーザー定義関数
関数は用意されているものだけでなく、自分でも作ることができます。これを「ユーザー定義関数」といいます。特定の処理をまとめて入れておき、必要なタイミングで使います。ユーザー定義関数は、次のような形式で書きます。
// 関数の定義
function 関数名()
{
・・・処理・・・
}
// 関数のよびだし
関数名();
サンプルコード
<?php
//関数の定義
function aisatsu(){
echo 'こんにちわ!';
}
//関数のよびだし
aisatsu();
?>
実行結果
こんにちわ!
サンプルコードの解説
aisatsu()で呼び出します。すると上に定義した function aisatsu(){~ が実行されます。
15引数とは:
関数に渡される値
関数へ数値や文字などのデータを渡して処理することができます。このときの渡すデータのことを「引数」といいます。
サンプルコードをみてみましょう。
サンプルコード
<?php
//関数の定義
function shouhizei($val){
echo $val * 1.1;
}
$num = 100;
//関数のよびだし
shouhizei($num);
?>
実行結果
110
サンプルコードの解説
消費税を表示する処理のイメージになります。引数として$numをshouhizei()に渡しています。shouhizei()は 100 を受け取って計算し、110を表示します。
16戻り値とは:
関数を通してかえされる値
関数では「return」を使って、実行結果を返すことができます。このときの関数から戻される値を「戻り値」といいます。
実行結果を返してもらうことで、独自の関数で処理したデータをまた使うことができます。
サンプルコードをみてみましょう。
サンプルコード
<?php
//関数の定義
function shouhizei($val){
return $val * 1.1;
}
$num = 100;
//関数のよびだし
$kakaku = shouhizei($num);
echo $kakaku . '円';
?>
実行結果
110円
サンプルコードの解説
前半はひとつ前のサンプルコードと同じです。100を受け取って計算し、今度は 110 をその場で表示しないで返しています。返された $kakaku に円をつけて表示しています。ユーザー定義関数では、自分オリジナルの処理をまとめておくことができます。何度も同じ処理を書くことなく、再利用できるため、とても便利です。
17引数 ①
デフォルト値いれよう
引数にはあらかじめ、データをセットすることでデフォルト値(初期値)をもつことができます。引数があれば、渡された値をつかいます。なければセットされたデータをつかいます。サンプルコードをみてみましょう。
サンプルコード
<?php
//関数の定義
function shouhizei($val = 100){
return $val * 1.1;
}
$num = 200;
//関数のよびだし
$kakaku = shouhizei($num);
echo $kakaku . "円< br/>\n";
$kakaku2 = shouhizei();
echo $kakaku2 . "円< br/>\n";
?>
実行結果
220円
110円
110円
サンプルコードの解説
引数にイコール「 = 」を使ってデフォルト値をセットできます。$kakaku には shouhizei() により、渡された 200 が×1.1され220が入ります。$kakaku2 は shouhizei() に渡される値がないため、デフォルト値の 100 が使われ、計算され、110が入ります。
デフォルト値をセットされていると、引数で渡さなくても、自動でデータをいれて処理してくれます。引数の渡し忘れのときに起こるエラーを予防できます。使えるところでは積極的につかうことをおすすめします。
18引数 ②
複数わたそう
関数に引数をいくつも渡すこともできます。引数は呼び方があり、左から順に第一引数、第二引数・・と呼びます。サンプルコードをみてみましょう。
サンプルコード
<?php
//関数の定義
function hyouji($val, $type){
$okane = $val . $type;
return $okane;
}
//関数のよびだし
$kakaku = okane(100,"ドル");
echo $kakaku;
?>
実行結果
100ドル
サンプルコードの解説
okane()に値 100 , ドル を渡すことで、数字と文字を組み合わせた「100ドル」が $kakaku に入ってきます。複数の引数が渡って、処理しています。
19引数 ③
型をつけよう
◎慣れてからつかおう
この内容は、はじめのうちは、特に意識しなくとも大丈夫です。そういうのもあるんだなぁ程度で構いません。すぐ理解できなくとも、前にすすめましょう。
関数の引数に int や string などのデータの型を指定することができます。
経験者のコードで見ることがあるかもしれません。
開発が複雑に進んでいくと、思わぬエラーに苦しみます。型を指定しておくと、想定外のエラーをより検知しやすくなります。実務レベルにおいては、すこしでも余計な心配をすることなく、開発できることは大いにメリットがあります。
サンプルコード
<?php
//関数の定義
function sum(int $a, int $b) {
return $a + $b;
}
//関数のよびだし
$kekka = sum(1, 2);
echo $kekka;
?>
実行結果
3
サンプルコードの解説
function sum(int $a, int $b) のように、関数の引数の前に型をかきます。それ以外の型を渡すと、エラーになります。20戻り値:
型をつけよう
◎慣れてからつかおう
この内容は、はじめのうちは、特に意識しなくとも大丈夫です。そういうのもあるんだなぁ程度で構いません。すぐ理解できなくとも、前にすすめましょう。
関数の戻り値にも int や string などのデータの型を指定することができます。(※PHP7以降から使える機能です)
何もしなければ、関数から返却される値の型はPHPが自動で決定しています。
こちらも経験者のコードで見ることがあるかもしれません。
サンプルコードをみてみましょう。
<?php
//関数の定義
function test ($val): int
{
if ($val == 1) {
return 0;
} else if ($val == 2) {
return '0';
} else {
return false;
}
}
$a = test(1);
echo $a . "< br/>\n";
$b = test(2);
echo $b . "< br/>\n";
$c = test(3);
echo $c . "< br/>\n";
?>
実行結果
0
0
0
0
0
サンプルコードの解説
function test ($val): int のように、定義の引数のとなりに : int など型を指定します。$a は整数の0
$b は文字列の0
$c はfalse
が戻り値になりますが、int型(整数)に変換されます。
$b は文字列の0 → 整数の0に変換
$c false → 整数の0に変換
指定に合わせた形に戻り値が型変換できれば、変化します。うまく行かない場合はエラーになります。
21引数の
値渡しと参照渡し
◎慣れてからつかおう
この内容は、はじめのうちは、特に意識しなくとも大丈夫です。そういうのもあるんだなぁ程度で構いません。すぐ理解できなくとも、前にすすめましょう。
実は、関数の引数には「値渡し」と「参照渡し」という2種類のタイプがあります。
これまではすべて「値渡し」です。どこで値がどうなろうとも元に影響を与えることはありません。
「参照渡し」は値を渡すと、元の値が変化します。使い所が難しいです。
使用頻度が著しくひくいです。どこかで出会ったとときに、改めて調べるでもいいかもしれません。サンプルコードをみてみましょう。
サンプルコード
<?php
//関数の定義
function drink(&$a) {
$a = "Otya";
}
$b = "Tea";
echo $b . "< br/>\n";
//関数のよびだし
drink($b);
echo $b . "< br/>\n";
?>
実行結果
Tea
Otya
Otya
サンプルコードの解説
function drink(&$a) のように関数の引数の前に「&」をつけます。はじめの $b はそのまま Tea です。$b は drink()に入れると$aの影響をうけ、元の $b が変化し、Otya になります。
いかがでしょうか。
関数は処理をまとめたり、読みやすくなるなどメリットだらけです。積極的につかってみてください。