おはこんばんちわ。この記事では、PHPの関数を呼び出して利用する方法やユーザ定義関数の作成方法について解説します。
関数とは
プログラム内では、同じ処理を何度も繰り返すことがあります。このように、繰り返し使用する処理をまとめて一つのブロックにして、名前をつけたものを関数といいます。
関数を使うことで、同じ処理を簡潔に書くことができますし、プログラム全体の見通しも良くなります。
関数は、以下のように定義します。
function 関数名(引数)
{
処理;
return 戻り値;
}
そして、次のように呼び出します。
//戻り値を変数に代入する場合
$var = 関数名(引数);
//戻り値を出力する場合
echo 関数名(引数);
例えば、以下のような関数を作ることができます。
//関数の定義(なんでも京都弁にする関数)
function kyoto($string)
{
$result = $string . 'どすえ';
return $result;
}
//関数を呼び出して、戻り値を変数に代入
$kyoto = kyoto('世の中には2種類の男しかいない。俺か、俺以外か');
//出力
echo $kyoto;
/*出力結果
世の中には2種類の男しかいない。俺か、俺以外かどすえ
*/
//※ローランド名言集より引用
この関数は、引数として受け取った文字列の末尾に「どすえ」を付け足して返します。その結果、ローランドが舞妓になるというとても画期的な関数です。
関数名のルール
PHPの関数名のルールは次のとおりです。
- 使える文字は「文字」「数字」「アンダースコア
_
」。文字はアルファベットのほか、日本語なども使える。 - 1文字目に数字は使えない。
- アルファベットの大文字と小文字は区別されない。
無料で利用できるプログラミング学習サービスをお探しならば Code Lesson はいかがでしょうか。プロのエンジニアが監修した学習ロードマップで効率的に学習、AIに質問、最後にクイズで理解度をチェックできます。
組み込み関数
PHPには多くの組み込み関数が用意されています。これらの関数を使えば、自分で関数を作成しなくても簡単に実行できますので、とても便利です。いくつかの例を見てみましょう。
strlen()
関数は、文字列の長さを得るための関数です。
$str = 'Hello World!';
echo strlen($str);
/*出力結果
12
*/
文字列「Hello world!」の長さ(文字数)を取得しました。スペースや記号も含めて12文字です。
date()
関数は日付や時刻を書式化するための関数です。
echo date('Y/m/d');
/*出力結果
2023/04/26
*/
このコードを実行したときの日付が「年/月/日」という書式で出力されます。
PHPには、他にも便利な組み込み関数が用意されていますので、以下のページで確認してみてください。
ユーザー定義関数
ユーザー定義関数とは、開発者が自分自身で定義する関数のことです。
最もシンプルな関数
最もシンプルなユーザー定義関数は、次のようになります。
//関数の定義
function yeah()
{
echo 'いえーい!';
}
//関数の呼び出し
yeah();
/*出力結果
いえーい!
*/
ただただecho 'いえーい!';
を実行するだけの関数です。
戻り値を返す関数
いきなり出力するのがイヤなら、戻り値を返すこともできます。
//関数の定義
function yeah()
{
return 'いえーい!';
}
//関数を呼び出して出力
echo yeah();
/*出力結果
いえーい!
*/
return
を使うと、関数の実行結果を値で返すことができます。これを戻り値といいます。返り値ともいいます。返り値だと返り血みたいで物騒なので、私は戻り値派です。
このようにすることで、戻り値を出力するだけでなく、変数に代入することも可能になります。$var = yeah();
のようにね。
引数を取る関数
関数は引数を取ることができます。引数とは関数に渡す値のことです。
//関数の定義(なんでも京都弁にする関数)
function kyoto($string)
{
$result = $string . 'どすえ';
return $result;
}
//関数を呼び出して出力
echo kyoto('世の中には2種類の男しかいない。俺か、俺以外か');
/*出力結果
世の中には2種類の男しかいない。俺か、俺以外かどすえ
*/
このように、関数に値を渡すと、その値を使って処理をして結果を返すということができます。
複数の引数を取る関数
関数は複数の引数を取ることができます。
//関数の定義(方言にする関数)
function hougen($string, $region)
{
if ($region == 'kyoto') {
$result = $string . 'どすえ';
} elseif ($region == 'osaka') {
$result = $string . 'でんがな';
} elseif ($region == 'sendai') {
$result = $string . 'だっちゃ';
} else {
$result = $string;
}
return $result;
}
//関数を呼び出して出力
echo hougen('世の中には2種類の男しかいない。俺か、俺以外か', 'sendai');
/*出力結果
世の中には2種類の男しかいない。俺か、俺以外かだっちゃ
*/
ふたつ目の引数で方言の種類を選べるようにしてみました。
引数のデフォルト値を設定する
関数の定義をするときに、引数のデフォルト値を設定することができます。デフォルト値とは、引数として何も指定しなかったときに設定される値のことです。
//関数の定義
function hougen($string, $region = 'kyoto')
{
if ($region == 'kyoto') {
$result = $string . 'どすえ';
} elseif ($region == 'osaka') {
$result = $string . 'でんがな';
} elseif ($region == 'sendai') {
$result = $string . 'だっちゃ';
} else {
$result = $string;
}
return $result;
}
//関数を呼び出して出力(第二引数を指定しない)
echo hougen('世の中には2種類の男しかいない。俺か、俺以外か');
/*出力結果
世の中には2種類の男しかいない。俺か、俺以外かどすえ
*/
2行目$region = 'kyoto'
とすることで、第二引数$region
のデフォルト値をkyoto
に設定しました。すると、関数を呼び出すときに第二引数を指定しなければ、京都弁が出力されます。もちろん、第二引数を指定すれば指定した方言が出力されます。
このように、デフォルト値が設定されていれば、呼び出すときに引数を省略することができます。なお、デフォルト値が設定されていない引数を省略するとエラーになります。
引数と戻り値の型を設定する
関数の定義をするときに、引数と戻り値の型宣言をすることができます。
//関数の定義
function hougen(string $string, string $region = 'kyoto'): string
{
if ($region == 'kyoto') {
$result = $string . 'どすえ';
} elseif ($region == 'osaka') {
$result = $string . 'でんがな';
} elseif ($region == 'sendai') {
$result = $string . 'だっちゃ';
} else {
$result = $string;
}
return $result;
}
2行目のstring $string
は第一引数は文字列のみ受け入れるという意味です。string $region
も同じく、第二引数は文字列ですよという意味です。そして、: string
は戻り値が文字列だという意味です。
このように引数や戻り値の型を宣言することで、想定外のデータ型の値を受け取ったり返したりすることがなくなるので、セキュリティの向上に繋がります。
よく使う型
よく使う型は以下のとおりです。
string
(文字列)int
(整数)float
(浮動小数点数)bool
(論理値)array
(配列)object
(オブジェクト)mixed
(あらゆる型)
union型
複数の型を許容したい場合は、|
を使ってint|float
のように書きます。
厳密な型チェックをする設定
以上のように型宣言をすると、引数や戻り値の型をチェックしてエラーを返してくれると思うでしょ?残念ながらそうではないんです。PHPは動的型付けの言語です。なので、データの型が正しくなくても、自動的に型を変換してしまいます。親切なのかお節介なのか。
というわけで、厳密な型チェックをしたいならば、次のように設定します。
//厳密な型チェックをする設定
declare(strict_types=1);
//関数の定義
function hougen(string $string, string $region = 'kyoto'): string
{
...
}
これで、引数や戻り値の型が正しくなければエラーを発生するようになります。
名前付き引数
PHPの関数で名前付き引数が使えるようになりました。これはPHP 8.0以降で使える機能です。
PHP 8.0より前のバージョンでは、関数が複数の引数を取るときに、決められた順序どおりに引数を渡す必要がありました。名前付き引数を使うと、順序を意識せずに引数を渡すことが可能になります。
//関数の定義
function hougen($string, $region)
{
...
}
$string = '世の中には2種類の男しかいない。俺か、俺以外か';
//関数を呼び出して出力(順番による引数指定)
echo hougen($string, 'osaka');
//関数を呼び出して出力(名前付き引数による引数指定)
echo hougen(string: $string, region: 'osaka');
//関数を呼び出して出力(名前付き引数による引数指定 順番入れ替え)
echo hougen(region: 'osaka', string: $string);
/*出力結果
世の中には2種類の男しかいない。俺か、俺以外かでんがな
世の中には2種類の男しかいない。俺か、俺以外かでんがな
世の中には2種類の男しかいない。俺か、俺以外かでんがな
*/
このように、関数を呼び出すときに引数の前に引数名:
を記述するだけで、名前付き引数を使うことができます。引数の順序を入れ替えてもちゃんと動作していますね。
名前付き引数を使うメリットは次のとおりです。
- 引数名により引数の意味がわかるのでコードの可読性が増す
- 引数の順序を変えることができる
- 特定の引数だけデフォルト値以外の値にしたいときに、他の引数の記述をスキップできる
さいごに
以上でーす。PHPの関数を使うことでプログラムの見通しが良くなり、コードの再利用性も高まります。まだ誰も作ったことのない関数をあなたが作って公開しましょう。尊敬の眼差しを浴びること請け合いです。
でわでわ
無料で利用できるプログラミング学習サービスをお探しならば Code Lesson はいかがでしょうか。プロのエンジニアが監修した学習ロードマップで効率的に学習、AIに質問、最後にクイズで理解度をチェックできます。
コメント