Help us understand the problem. What is going on with this article?

【PHP】ユーザー定義関数を初心者に説明してみる

初心者のみなさん、関数使ってますか?
普通に使ってるってツッコミありがとうございます笑

公式から

公式: ユーザー定義関数

公式の例から
<?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行の処理ですが20行ぐらいあって、それに適切な関数名をつけてあげたらどうでしょう? 関数名がコメントの役割を果たしてくれるってわけです!
1.状態を変化させる
function outputColumn($user, $id) {
    echo $user[$id];
}
  • 返り値のあるパターンです 引数に入力された値を元に計算やDB処理を行い、値やオブジェクトを返します。 関数はブラックボックスにすることができます。
2.数式などで値やオブジェクトを返す
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お願いします!
ストックのついでにお願いします!
モチベーションがあがります!

Fell
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away