プログラミングの基礎である関数は機能をまとめ再利用できるようになる便利な仕組みです。ただ学んでみると理解できるまで時間がかかり曖昧なまま飛ばしてしまうプログラマもいます。今回はPHPの関数を自作できるよう紹介していきます。
関数とはプログラムで記述した一連の流れをひとまとまりに定義したものです。
例えば「メールを送信する」「クレジット決済する」など機能を作った時に、同じ機能を複数のページで使いまわしたりすることがあります。関数はそういった機能を切り出し、同じ処理を何度も呼び出せるようにしたり、基本ロジックを整理し可読性をあげるといった役割を持ちます。
同じ機能をまとめて実装するのが関数と言っても実際どんな感じで使うのでしょうか?
例えばECサイトで
と流れを実装する時に、商品毎にカートに入れる処理を実装したり、永遠と長い処理で購入から支払いの処理をカタカタコーディングすることはありません。
といったように、1つ1つの処理の単位で関数を作って実装します。(正確に言えばクラス設計してメソッド定義しますが、長くなるので関数で覚えていてください)
原則は一連の処理に名前を定義できるくらい、1機能1関数を作る位が丁度良いとされます。
関数のメリットは次のようなものがあります。
関数を使うデメリットはありません、どんなプロジェクトにおいても関数を使うべきです。
使わないのであれば、よっぽど小さなコード(数十行)程度のものなど検証で試す程度でしょう。
関数を定義するにはfuntion
を使います。functionの後にプログラマが定義した関数名を指定します。
function 関数名(引数){
// 処理
return 戻り値;
}
では実際に単純な関数を作ってみましょう。
文字を出力するだけの簡単な処理をhello関数として定義してみます。
echo "こんにちは";
function hello()
{
echo "こんにちは";
}
実行するためにはhello
関数を呼び出してあげれば定義した機能処理してくれます。
function hello()
{
echo "こんにちは";
}
hello();
hello();
hello();
// 3回呼び出すと「こんにちは」という出力が3回実行されます。
関数は一度定義すると、どこでも何回でも定義した処理を使い回すことができます。
引数とは関数に渡すことのできる値のことです。関数は実行すると同じ処理を繰り返しますが、引数で値を渡すことで値に応じた処理を実行できるようになります。
先ほどのhello
関数に名前を渡すことのできるように改良してみましょう。
<?php
function hello($name)
{
echo "こんにちは{$name}さん";
}
hello('佐藤');
// 出力結果:こんにちは佐藤さん
このように引数に佐藤という文字列を指定してあげると、hello関数の引数の$nameに佐藤という文字列が入り処理されます。
関数の基本である戻り値は関数の処理結果を変数に格納できるようにするものです。 先程まではhello関数を実行したらテキストが出力されていましたが、戻り値にテキストが入るように変更します。
<?php
function hello($name)
{
return "こんにちは{$name}さん";
}
$text = hello('佐藤');
echo $text;
これで関数を実行すると$textに実行結果であるこんにちは佐藤さん
という文字列が入っていることが確認できました。
関数を定義する時には処理の塊をイメージし、変動する部分を引数に設定し、再利用したい値を戻り値に設定するよう考えると綺麗に設計できるかもしれません。
関数の引数は何個でも増やすことができます。
function add($a, $b)
{
return $a + $b;
}
function add(...$args)
{
$num = 0;
foreach ($args as $arg) {
$num += $arg;
}
return $num;
}
echo add(1, 3, 4); // 出力結果:8
function hello($name = '田中')
{
echo $name;
}
hello(); // 出力結果:田中
hello('佐藤'); // 出力結果:佐藤
引数と戻り値には型を定義することができます。 型を定義することで指定する型以外のものが設定されたときにエラー出力させることができます。これにより意図しない挙動やバグを事前に防ぐことができるようになります。
function profile(string $name, int $age): string
{
return "{$name}は{$age}歳です。";
}
関数の戻り値は複数箇所で設定することができます、returnが呼び出されると関数の処理は終了され呼び出し元に戻ります。
function validate($name)
{
if(!$name){
return '指名が入力されていません';
}
// 登録処理など
return '';
}
関数を使うことで複雑な処理を単純化させ開発効率を高めることができます。同じ処理は極力まとめチームメンバーが読みやすいコードを心がけることで開発効率が上がり業務としての開発もできるようになってきます。是非関数について覚えていきましょう。