ITHACK
~ みんなのIT部門 ~

【PHP】関数(function) – 一連の処理をまとめる

一連の処理をまとめた関数と呼ばれる仕組みがあります。

ここでは関数について解説します。

  • 関数

  • 関数のメリット・デメリット

関数とは

関数とは『一連の処理をまとめた定義』です。

関数は2種類あり、標準関数独自関数があります。
標準関数はPHPに既存で用意されているもので、独自関数は自分で作った関数のことです。
標準関数の例としては、print()やvar_dump()、get_class()、gettype()などがあり、関数を知らなくても使ったことがあると思います。

また、関数は定義しただけではその一連の処理は実行されません。
実行するには関数の呼び出しと呼ばれる仕組みを使います。

基本構文

関数の基本構文は定義と呼び出しの2つあります。

関数の定義

関数を定義する基本構文は次のようになります。

function 関数名() {
    // 処理1
    // 処理2
    // ・・・・・・
}

関数名は変数名と同様に自由に決めることができます。

※ 引数や戻り値については別の記事で解説します。
※ 関数名には予約語等は使えません。

関数の呼び出し

関数を呼び出す基本構文は次のようになります。

関数名()

サンプルコード

関数のサンプルコードをご覧ください。

<?php

function sample() {
    echo "sample関数を実行しました。\n";
}

sample();

?>
sample関数を実行しました。

3~5行目が関数の定義です。
関数名をsampleとして、処理の内容をsample関数を実行しました。と出力するようしています。

そして、7行目が関数の呼び出しになります。
sample関数を呼び出すため、関数名に続いて丸括弧()を記述しています。

実行結果にsample関数を実行しました。と出力されていることから、echo "sample関数を実行しました。\n";が1度だけ実行されたことが分かります。

また、次のように関数は複数定義することができ、何度でも呼び出すことができます。

<?php

function sample() {
    echo "sample関数を実行しました。\n";
}

function example() {
    echo "example関数を実行しました。\n";
}

sample();
example();

sample();
example();

sample();
example();

?>
sample関数を実行しました。
example関数を実行しました。
sample関数を実行しました。
example関数を実行しました。
sample関数を実行しました。
example関数を実行しました。

新しくexample関数を定義し、sample関数とexample関数を3回ずつ呼び出しています。
呼び出した回数だけ、実行されるので、実行結果ではsample関数を実行しました。example関数を実行しました。が3回出力されています。

メリット・デメリット

関数を使うメリット・デメリットは次のようになります。

メリット

1. コードの量を減らすことができる。

コードの量を減らすことができる場合があります。
例えば、関数を使わない場合の次のコードをご覧ください。

<?php

echo "おはようございます!\n";
echo "プログラミンを学んでいきましょう。\n";
echo "今回は関数を理解しましょう。\n";
echo "関数とは『一連の処理の定義』です。\n";
echo "\n";

echo "こんにちは!\n";
echo "プログラミンを学んでいきましょう。\n";
echo "今回は関数を理解しましょう。\n";
echo "関数とは『一連の処理の定義』です。\n";
echo "\n";

echo "こんばんは!\n";
echo "プログラミンを学んでいきましょう。\n";
echo "今回は関数を理解しましょう。\n";
echo "関数とは『一連の処理の定義』です。\n";
echo "\n";

?>
おはようございます!
プログラミンを学んでいきましょう。
今回は関数を理解しましょう。
関数とは『一連の処理の定義』です。

こんにちは!
プログラミンを学んでいきましょう。
今回は関数を理解しましょう。
関数とは『一連の処理の定義』です。

こんばんは!
プログラミンを学んでいきましょう。
今回は関数を理解しましょう。
関数とは『一連の処理の定義』です。

全部で21行のソースコードになっています。
このコードで関数を使うと次のようになります。

<?php

function lets_programming() {
    echo "プログラミンを学んでいきましょう。\n";
    echo "今回は関数を理解しましょう。\n";
    echo "関数とは『一連の処理の定義』です。\n";
    echo "\n";
}

echo "おはようございます!\n";
lets_programming();

echo "こんにちは!\n";
lets_programming();

echo "こんばんは!\n";
lets_programming();

?>

全部で19行のソースコードになりました。
2行減ったことが分かります。この例ではコード量が少ないので、効果を体感しづらいかもしれませんが、何千、何万行あるプログラムの場合、コード量を大きく削減できます。

また、このように同じ処理を1つの処理にまとめることを共通化、1つの処理にまとめたものを共通処理と呼ぶことがあります。

この考え方は良いプログラムを作るために重要なので、覚えておきましょう。

2. コードの可読性が向上する。

上記の関数を使用した場合と使用しない場合のコードを比較すると、使用したコードの方が読みやすいと思います。
1つ目のメリットにも繋がりますが、コード量が減ると読みやすくなることが多くあります。

また、関数を使用しない場合、次のコードを3回読まなければなりませんが、使用した場合は1度で済みます。

echo "プログラミンを学んでいきましょう。\n";
echo "今回は関数を理解しましょう。\n";
echo "関数とは『一連の処理の定義』です。\n";
echo "\n";

3. コードの柔軟性が向上する。

コードの柔軟性とはアプリケーション設計や改修などで用いられる用語ですが、ここではコードに修正を加える場合のメリットを代表例として解説します。

上記コードを下記内容で修正する場合を考えてみましょう。

【 変更箇所 】
echo "関数とは『一連の処理の定義』です。\n";
を
echo "関数は標準関数と独自関数の2種類あります。"
に変更

関数を使用しない場合は、echo "関数とは『一連の処理の定義』です。\n";の記述がある3行を修正しなければなりません。
しかし、関数を使用した場合は、1行を修正するだけです。

<?php

function lets_programming() {
    echo "プログラミンを学んでいきましょう。\n";
    echo "今回は関数を理解しましょう。\n";
    echo "関数は標準関数と独自関数の2種類あります。\n";
    echo "\n";
}

echo "おはようございます!\n";
lets_programming();

echo "こんにちは!\n";
lets_programming();

echo "こんばんは!\n";
lets_programming();

?>
おはようございます!
プログラミンを学んでいきましょう。
今回は関数を理解しましょう。
関数は標準関数と独自関数の2種類あります。

こんにちは!
プログラミンを学んでいきましょう。
今回は関数を理解しましょう。
関数は標準関数と独自関数の2種類あります。

こんばんは!
プログラミンを学んでいきましょう。
今回は関数を理解しましょう。
関数は標準関数と独自関数の2種類あります。

このように関数を使った方がスマートにプログラムを組むことができるケースがあります。

デメリット

デメリットは、『メリットを理解せず使ってしまうと複雑なプログラムになる』ということです。

例えば、関数を使用してもコード量が減らない場合や、本来意味が異なるコードを共通化してしまうなどで、使うタイミングが重要です。

デメリットを回避するにはメリットを理解して関数を使うようにしましょう。

演習問題

問題1

次の実行結果になるプログラムを作成してください。
なお、下記条件を満たすものとします。

  • Hello World!を1回出力するgreeting関数を定義する
  • 実行結果になるようにgreeting関数を呼び出す
Hello World!
Hello World!
Hello World!

問題2

時間(0~23)に応じてあいさつ文を出力するプログラムを作成してください。
なお、下記条件を満たすものとします。

  • あいさつ文は朝、昼、夜の3種類とする。
  • あいさつ文と対応する時間は表の通り
  • 各種あいさつ文を出力する関数を定義する
  • あいさつ文は関数を使って出力する
  • 時間は標準入力で入力(0~23)する
種類 時間 挨拶文
0~11 Good morning!
It’s a nice weather.
12~17 Good afternoon!
It’s a nice breeze.
18~23 Good evening!
The moon is beautiful.
$ php practice.php
HOUR > 9
Good morning!
It's a nice weather.
$ php practice.php
HOUR > 13
Good afternoon!
It's a nice breeze.
$ php practice.php
HOUR > 21
Good evening!
The moon is beautiful.
$ php practice.php
HOUR > 99
Please enter from 0 to 23.
$ php practice.php
HOUR > -1
Please enter from 0 to 23.

まとめ

関数は『一連の処理の定義』です。
使いこなせるようになると、メリットを受けることができます。
最初は早くプログラムを組むことができるようになり、プログラミングを楽しくする1つの要素でもありますので、覚えていきましょう。