プログラミングをしていると、同じような処理を何度も書く場面に出くわします。
「消費税を計算して表示」
「消費税を計算して表示」
「消費税を計算して表示」
・・・
そのたびにコードをコピペしていませんか。
それは、あなたが経営するコンビニでおにぎりを売るたびに、レジ打ちの店員を新しく雇っているようなものです。非効率極まりないです。
もし消費税が10%から15%に変わったらどうしますか。
あなたはコピペした全ての箇所を探し出し、血眼になって修正することになります。一箇所でも漏らせば、計算が合わなくなりシステムは破綻します。
全置換を過信してはいけません。
そんな地獄を回避するための仕組みが「関数(function)」です。
これは、特定の処理をパッケージにして、いつでも呼び出せるようにした「下請け業者」のような存在です。
関数:面倒な仕事を丸投げする「専門業者」
関数とは、一連の処理に名前をつけてまとめたものです。
PHPには最初から用意されている「ビルトイン関数(date() や count() など)」がありますが、今回解説するのは、あなたが自分で作る「ユーザー定義関数」です。
イメージしてください。
あなたはメインの進行管理者です。細かい計算や面倒な文字加工を、自分でする必要はありません。
「すまん、これ計算しといてちょうだい」
と命令すれば、裏で勝手にやってくれる部下を作る。それが関数の作成です。
定義:マニュアルを作って看板を掲げる
業者(関数)を雇うには、まず「何をどうするのか」というマニュアル(定義)が必要です。
PHPではfunctionというキーワードを使います。
function aisatsu() {
echo "こんにちは!いい天気ですね。";
}Code language: PHP (php)
これでaisatsuという名前の業者が誕生しました。
しかし、これだけでは何も起きません。看板を掲げただけで、まだ発注していないからです。
使うときは、名前を呼びます。
aisatsu(); // こんにちは!いい天気ですね。Code language: JavaScript (javascript)
たった1行書くだけで、{ }の中に書かれた処理(今回の例ではecho文が2行)がすべて実行されます。
100回呼び出せば、100回挨拶します。修正が必要なら、定義の中身を書き換えるだけで、呼び出し元すべてに反映されます。
引数:業者に渡す「材料」
ただ挨拶するだけの業者では困ってしまいます。
状況に合わせて仕事を変えてもらわなければなりません。
そこで渡すのが「引数(ひきすう)」です。
いんすうと読んで恥をかいた人も多いはずです。
これは業者への「発注書」や「材料」にあたります。
function aisatsu($name) {
echo $name . "さん、こんにちは!";
}
aisatsu("田中"); // 結果:田中さん、こんにちは!
aisatsu("佐藤"); // 結果:佐藤さん、こんにちは!Code language: PHP (php)
カッコの中に渡したデータが、関数内の$nameという変数に入ります。
これによって、同じ関数でも渡す材料次第で結果を変えることができます。
今回は「田中」と「佐藤」という文字列を渡していますが、他の文字列を渡せばもちろん「○○さん、こんにちは!」の「○○」の箇所に反映されます。
戻り値:業者からの「納品」
ここからが、関数を習得したい初心者の最大の壁です。
関数には「やりっ放し」と「結果を返す」の2パターンがあります。
計算結果を受け取って、それを別の計算に使いたい場合、関数から値を戻してもらう必要があります。これを「戻り値(もどりち)」と呼びます。
使うキーワードはreturnです。
function tashizan($a, $b) {
$result = $a + $b;
return $result; // 計算結果を納品する
}
$answer = tashizan(10, 20); // 30という結果が返ってくる
echo $answer + 5; // 結果:35Code language: PHP (php)
tasizan(10, 20) という部分は、実行されると30という数値に化けます。
そのため、上記の例では変数$answerに30という数値が入ります。だから、その後の計算に使えるのです。
echoとreturnの違い:独り言か、報告か
よくある間違いがこれです。
「画面に表示したいからechoを関数の中に書けばいいんでしょ?」
間違いではありませんが、使い勝手が悪くなる可能性が高いです。
- echo:「その場で叫ぶ」行為
- return:「上司(呼び出し元)に書類で報告する」行為
関数の中でechoしてしまうと、その関数は計算結果を画面に出すことしかできません。
「計算結果をデータベースに保存したい」「メールで送りたい」と思った時に使えないのです。
基本的にはreturnで値を返し、表示するか保存するかは、呼び出した側(上司)が決める。
これができる部下(関数)の作法です。
まとめ:メイン担当者は指示出しに専念せよ
プログラムが複雑になってきたら、処理を関数に切り出してください。
- 定義:
function 名前() { ... }でマニュアル化 - 引数:
()の中に材料を渡す - 戻り値:
returnで成果物を受け取る
語弊があるかもしれませんが、メインのコードには「○○しろ」「××しろ」という指示だけが並んでいる状態が理想です。
詳細な作業手順は、できるだけ関数に保持する。
自分が楽をするために、優秀な下請け業者(関数)を量産し、合理的なプログラムを作っていきましょう!


コメント