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