LoginSignup
28
26

More than 5 years have passed since last update.

phpで省略可能(Optional)な引数を実現したい

Last updated at Posted at 2016-02-17

オプショナルの引数やりたいなー、って思って調べたら、出来そうでしたので、備忘録として、記述しておきます。

引数を省略したい。

例として、リストを出すような場合を想定します。

条件を付けた時だけ、その条件を元にデータを絞り込んで、条件が無かったら全件出したい、などですね。

そんな時の実装として、以下のような関数を作ったとします。

条件付き絞込例
<?php
function getCustomer($name)
{
  if (name == null) {
    $sql = "SELECT * FROM customer";
    $data = /* ~ データ抽出処理 ~ */
  } else {
    $sql = "SELECT * FROM customer WHERE NAME = :name";
    $params = array(
      'name'=>$name,
    );
    $data = /* ~ データ抽出処理 ~ */
  }

  return $data ;
}

// 絞り込みたい場合
// 顧客名が hoge の人だけが抽出
echo getCustomer('hoge');

// 絞り込みたくない場合
// 全ての顧客が抽出
echo getCustomer(null);
?>

でも、絞り込みたくない箇所で毎回、getCustomer(null)なんて書くのはだるいですよね。

そんな時には、このように実装します。

条件付き絞込例_改善
<?php
function getCustomer($name = null)
{
  if (name == null) {
    $sql = "SELECT * FROM customer";
    $data = /* ~ データ抽出処理 ~ */
  } else {
    $sql = "SELECT * FROM customer WHERE NAME = :name";
    $params = array(
      'name'=>$name,
    );
    $data = /* ~ データ抽出処理 ~ */
  }

  return $data ;
}

// 絞り込みたい場合
// 顧客名が hoge の人だけが抽出
echo getCustomer('hoge');

// 絞り込みたくない場合
// 全ての顧客が抽出
echo getCustomer();
?>

function getCustomer($name = null) の部分に注目してください。

いわゆる引数にデフォルト値を設定しておく、という手法で、$name = null と設定しておくことで、getCustomer();getCustomer(null); の呼び出しは全く同じ結果となります。

28
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
26