初心者のみなさん、関数使ってますか?
普通に使ってるってツッコミありがとうございます笑
公式から
<?php
function foo(引数1, 引数2, /* ..., */ 引数_n)
{
echo '関数の例' . '<br>';
return $retval;
}
?>
上の例は単に関数ってこんな形だよってだけの例ですね。
あんまり参考になりません。
ちょっと使える形にしてみます。
<?php
function add(num1, num2)
{
$sum = num1 + num2;
return $sum;
}
//call
$num1 = 5;
$num2 = 10;
echo add(num1, num2);
//-> 15
?>
使えない??
たしかに使えないですね笑
そもそも1行で書ける足し算を関数にしただけなので。
では関数ってどんなときに使うと効果的なんでしょうか?
関数を使う場面
例えばこんな処理
DBに接続してユーザーがいたら、 ユーザー情報を取ってきて、 選択した値によって表示するカラムを変更して出力。
<?php
$input_column_int = 3;
$dbh = connectDb();
$user = findUser($dbh, $id));
if ($user) {
outputColumn($user, $input_column_int);
} else {
echo 'ユーザーが見つかりません';
}
connectDb();
//->PDOを使ってDBに接続する関数
findUser();
//SQLをPDOで走らせて$idに対応するユーザー情報を取ってくる関数
outputColumn()
//-> $userのカラム番号=$input_column_intの値を表示する関数
詳しいコードは書きませんが、関数を使っているとスッキリ見えますよね?
全部のコードをベタ書きすると読むのがウンザリするのはなぜでしょうか?
処理が2つ以上存在してくるとややこしくなる
なのでこういうことです!
関数で処理を隠す関数名でなんの処理かわかるようにする一気に可読性があがる
関数を作るときに意識したいこと
関数は大きく分けて2種類に分かれます。
1.状態を変化させる
2.数式などで値やオブジェクトを返す
-
1は例えば出力です。
やっている処理ブロックに名前をつけてあげるイメージです。
ここでは1行の処理ですが20行ぐらいあって、それに適切な関数名をつけてあげたらどうでしょう?
関数名がコメントの役割を果たしてくれるってわけです!
function outputColumn($user, $id) {
echo $user[$id];
}
-
2は返り値のあるパターンです
引数に入力された値を元に計算やDB処理を行い、値やオブジェクトを返します。
関数はブラックボックスにすることができます。
function findUser($dbh, $id) {
$sql = 'select * from users where ?';
$stmt = $dbh->prepare($sql);
$stmt->execute([$id]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
return $user;
}
関数を1処理にすることのメリット
-
テストが容易になる -
使い回しやすくなる -
関数名が明確になり、コード内の可読性があがる
まとめ
・関数化するときに一番気をつけることは、読みやすくすることです。
・そして関数化した部分は十分なテストをし、ブラックボックス化して後々チェックする部分を極力減らしましょう。
・最初から関数化しようとせずに、処理が増えてきた後にやるほうが無難です。
・最初からやってやろうはあまりうまくいきません笑
お願い
LGTMお願いします! ストックのついでにお願いします! モチベーションがあがります!