本文までスキップする

【PHP入門】関数 Vol.4【初心者向け】

Publish date
Category
アバター画像
Author
Mineo Okuda

こんにちは、アートディレクターの奥田です。
毎年、夏の甲子園には感動させられますね。
なかでも2回戦 済美(愛媛)対 星稜(石川)の試合は本当に劇的な試合で、義実家で点が入るたびに皆で盛り上がっていました。

さて前回は「配列について」ご説明いたしました。
今回はこちらもプログラミング言語にとって欠かせない「関数」についてご説明いたします。

Table of contents

  1. 関数とは?
  2. 関数の種類
  3. 関数の書き方
  4. 引数と返り値
  5. 無名関数
  6. さいごに

関数とは?

前回前々回で変数や配列とは値を入れておく箱という説明をしました。 関数とはいくつかの処理をまとめておくものだと捉えていただけるとわかりやすいと思います。 例えば同じ処理を複数箇所で指定したい場合、何度も同じ処理を書いていてはコードが冗長になり、修正が入った際もすべての箇所で修正が必要になってしまいます。

// 消費税の計算を何度も書いてしまう例
$price_a = 100;
$price_a = $price_a * 1.08;
 
$price_b = 200;
$price_b = $price_b * 1.08;
 
$price_c = 300;
$price_c = $price_c * 1.08;

上記例と下記例は同じ処理をしています。 3つの値を変更してるだけなのでそれほどコード量は変わらないですが、これが100や200となるとどうでしょうか? 下記のように関数を使うとコードの見通しがよくなります。

//関数を使用した例
function include_tax($price){
  return $price * 1.08;
}
$price_a = include_tax(100);
$price_b = include_tax(200);
$price_c = include_tax(300);

関数の種類

PHPでは関数は大きく分けて2つあります。

組み込み関数

組み込み関数はPHPが提供している関数です。 リファレンスをご覧いただければわかりますが、たくさんの組み込み関数が存在します。 すべてを覚えるのはかなり大変なのでプログラマーは用途に応じて関数を調べて使います。

ユーザー定義関数

ユーザーが独自に処理を記述できる関数です。 好きな名前(組み込み関数とかぶらなければOK)をつけることができ、自由に処理を書くことができます。 本記事では主にユーザー定義関数についてご説明いたします。

関数の書き方

先程も少し紹介しましたが関数とはfunction(ユーザー定義関数)を使用して宣言します。

//関数の定義
function 関数名(){
  // 何かしらの処理を書く
}

関数の呼び出しは関数名に()をつけるだけです。 注意が必要なのは関数を先に定義しておく必要があることです。

//関数の呼び出し
関数名();

引数と返り値

関数には引数(ひきすう)と呼ばれる値を指定することができます。 呼び出し側で指定した値によって結果を変えることができます。

//引数を指定した関数の定義
function 関数名($引数){
  // $引数
}
 
//引数を指定した関数の呼び出し
関数名($引数);

例えば以下のようにすることで違う結果を得ることができます。

function hello($name){
   echo 'Hello, '. $name .'.';
}
 
hello('Aoba Suzukaze'); // Hello, Aoba Suzukaze.
hello('Nene Sakura'); // Hello, Nene Sakura.

また、引数にはデフォルト値を指定することができ、デフォルトの場合は省略することができます。

function order($drink = "coffee"){
   echo 'I ordered '. $drink .'.';
}
order(); // I ordered coffee.
order('tea'); // I ordered tea.

また、return文を使うことで返り値(かえりち)と呼ばれる、”関数に値を返す処理”を施すことができます。

function 関数名(引数){
  処理内容;
  return 返り値;
};

返り値は関数内で様々な処理をして最終的な結果を返すというのが主な使用目的となっています。
ですのでreturnした後の処理は実行されません。

function order($drink = "coffee"){
  $str =  'I ordered '. $drink .'.';
  return $str;
  echo 'end'; // 実行されません。
}
echo order(); // I ordered coffee.
echo order('tea'); // I ordered tea.

無名関数

関数を定義せず作成できる無名関数と呼ばれるものが存在します。 無名関数はクロージャとも呼ばれ、関数名を指定せずに関数を作成できるようにするものです。

$message = function($name){
   return 'Hello, '. $name .'.';
}
echo $message('Aoba Suzukaze'); // Hello, Aoba Suzukaze.

無名関数の使い所は様々ですが、関数の中でも定義でき再帰的な処理を書くことができます。
このとき、useでローカル変数$cntを明示的に引き渡す必要があります。

function counter(){
  $cnt = 1;
  return function () use (&$cnt){
    return $cnt++;
  };
}
$count1 = counter();
$count2 = counter();
echo $count1(); // 1
echo $count2(); // 1
echo $count1(); // 2
echo $count2(); // 2

さいごに

今回は少し難しい関数についてご説明しました。 プログラミングとはよりシンプルに書くことが重要です。 関数を使うことでいろんな処理をシンプルにまとめることができ、コードを明瞭化することができます。 少しでも皆さんの参考になれば幸いです。