オプショナルの引数やりたいなー、って思って調べたら、出来そうでしたので、備忘録として、記述しておきます。
引数を省略したい。
例として、リストを出すような場合を想定します。
条件を付けた時だけ、その条件を元にデータを絞り込んで、条件が無かったら全件出したい、などですね。
そんな時の実装として、以下のような関数を作ったとします。
<?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);
の呼び出しは全く同じ結果となります。