PHP

【PHP入門】関数について

この記事では、PHPでの関数の使い方について解説します。

どんな言語でも関数はあると思いますが、PHPの関数は他の言語に比べて特別難しいところもないので、基本的な書き方さえ覚えればすぐに使いこなせると思います。

本格的なプログラムを書き始めたら関数は頻繁に使いますので、習得は必須です!

関数とは?

関数とは、複数の処理をひとまとめにして使いまわすことができる仕組みです。
また、詳細は後ほど詳しく解説しますが、関数には引数と呼ばれるパラメータを渡すことができ、処理の結果を返すことができます。

関数を使用することによるメリットは、ソースコードが簡略化するという点と、メンテナンスが楽になるという点です。

例として、消費税を計算する処理を考えてみましょう。

$price1 = 100;
$price2 = 200;

$tax1 = $price1 * 0.08;
echo $price1."の消費税は".$tax1."です";

$tax2 = $price2 * 0.08;
echo $price2."の消費税は".$tax2."です";

消費税が8%→10%に変わったら、計算式の箇所を2行直さなければいけませんね。

関数を使うと以下のように書けます。

$price1 = 100;
$price2 = 200;

calc_tax($price1);
calc_tax($price2);

function calc_tax($price)
{
  $tax = $price * 0.08;
  echo $price."の消費税は".$tax."です";
}

これだと、消費税が変わっても直す箇所は1か所で済むので、メンテナンスが楽になります。
この例ではソースの簡略化というメリットは感じにくいかもしれませんが、数十行、数百行に渡る処理になってくると、より恩恵は大きくなります。

内部関数とユーザー定義関数

関数は上記のように自分で定義することもできますが、PHPであらかじめ用意されている関数もあります。そのような関数を、内部関数、ビルトイン関数、組み込み関数などと言ったりします。

そして自分で定義する関数をユーザー定義関数と言います。この記事では、主にユーザー定義関数の解説を行います。

内部関数についてはかなりの数があり、またサーバーにインストールされているPHPのコンパイル状況によって使用できる関数が異なってきます。

どんな関数があるかというのは徐々に覚えていくしかないですが、まずは、インターネットで検索するクセを付けておくと良いと思います。

例えば、プログラムを書いていて「こんなことをしたい」という小さな目的がたくさん出てくると思います。文字列を結合したい、配列をソートしたい、などです。
そうしたら、「PHP 文字列 結合」「PHP 配列 ソート」みたいな感じでググります。

そうすると、大抵は目的の関数が見つかると思います。

注意点として、ブログやQiitaなどにたどり着いて関数を見つけた場合でも、必ず公式マニュアルも確認するようにした方が良いです。
ブログの情報が間違っていたり、古かったりすることも良くありますので。

http://php.net/manual/ja/index.php

右上の検索ボックスに関数名を入力すると、関数の詳細を調べることができます。

関数の使い方

次に、具体的な関数の書き方と使い方を詳細に解説していきます。

関数の定義

上の例でも既に出てきていますが、関数の定義方法は以下のようになります。

  • function 関数名と書く
  • 関数名の後のカッコ内で引数を指定可能(複数指定、省略も可能)
  • 関数内の処理は{}で囲う
  • return 返り値 で値を返す(省略可能)
function 関数名(引数, 引数, ...)
{
  処理
  return 返り値;
}

引数、返り値の詳細については、以下で順に解説します。

引数

引数は、関数に渡すことのできるパラメータです。複数指定したり、省略することもできます。
引数を使うことで、処理の一部を可変にできます。

冒頭で出てきた消費税の例がわかりやすいと思いますが、「価格」を引数として渡すことで、渡した値に応じて「消費税」を計算することができます。

// 消費税を計算する関数
function calc_tax($price)
{
  $tax = $price * 0.08;
  echo $price."の消費税は".$tax."です";
}

ちなみにこの関数には、「返り値」がありません。最後にechoで出力するだけです。
なので、使用する際には以下のように書きます。

calc_tax(100);
calc_tax(200);

返り値

return 返り値; と書くことで、関数は値を返すことができます。
まず具体例を見てみましょう、先ほどの関数を、消費税を返す関数に改造してみます。

// 消費税を返す関数
function calc_tax($price)
{
  $tax = $price * 0.08;
  return $tax;
}

するとどうなるかというと、関数を使用する側で、返り値を受け取ることができます。

$tax1 = calc_tax(100);
$tax2 = calc_tax(200);

こうすることで、受け取った値を他の処理に使うこともできるようになり、より汎用的に使える関数になりましたね。

ちなみに、returnを実行した時点で、そのあとに処理があっても、その関数はそこで終了します。返り値を指定せずに、return; とだけ書くことも可能です。

// 消費税を返す関数
function calc_tax($price)
{
  // 引数が数値かどうかチェック
  if(!is_numeric($price)){
    return false;  // この時点で関数が終了
  }

  $tax = $price * 0.08;
  return $tax;
}

// returnサンプル
function return_sample()
{
  // この時点で関数が終了
  // 返り値が無い関数で途中で終了したい場合などに使う
  return;

  // ここの処理は実行されない
  echo '実行されない処理';
}

 

また、PHP7以降では返り値の型を明示的に宣言できるようになりました。

// 浮動小数点型で返す
function calc_tax1($price): float
{
  $tax = $price * 0.08;
  return $tax;
}

// 整数型で返す
function calc_tax2($price): int
{
  $tax = $price * 0.08;
  return floor($tax);
}

型の宣言は、関数名の後に「: 型」を付けます。

calc_tax1では、小数点以下を含めた数値を扱うfloat型を返します。calc_tax2では、整数型であるint型で返します。
ちなみに、calc_tax2で使用しているfloor()という関数は、小数点以下を切り捨てるための内部関数です。

無名関数

もうひとつ、無名関数というものにも一応触れておきます。

無名関数とは、その名の通り、名前の無い関数です。
主に「コールバック」という用途で使える仕組みなのですが、PHPでは少し使いどころが難しいかもしれません。

なので、こんな仕組みもあるんだということを覚えておく程度で良いと思います。実際、僕もあまり使いません。

無理やり先ほどの例に適用すると、以下のような感じです。

$calc = function($price)
{
  $tax = $price * 0.08;
  return $tax;
}

$price_list = array(100, 200);
$tax_list = array_map($calc, $price_list);

print_r($tax_list);

array_map()というのが、配列に対してコールバック処理を行う関数なのですが、$price_listという配列の要素に対してそれぞれ消費税計算の処理を行い、$tax_listにその結果が配列で格納されます。
つまり、$tax_list には array(8, 16) という値が入ります。

まとめ

概要をまとめます。

関数について

  • 関数とは、複数の処理をひとまとめにしたもの
  • 内部関数とユーザー定義関数がある
  • 引数で関数にパラメータを渡すことができる
  • 返り値で関数の結果を受け取ることができる
  • 無名関数は使いどころが難しい

関数は、PHPに限らずどのプログラミング言語でも使う仕組みです。
是非上手く使いこなしてください!