関数の引数(ひきすう)・戻り値(もどりち)について

2012-11-19 22:37:04
引数とは…戻り値とは…と言葉で書いてもパッとしなさそうなので、半角のカタカナを全角のカタカナに変換するmb_convert_kana関数を例として見てみよう。
<?php
$zenkaku = mb_convert_kana($hankaku, "KV");

//$hankaku が第一引数
//KV が第二引数
//$zenkaku が戻り値
?>
これで用語の意味は分かるかと思います。自分で関数を作る(ユーザー定義関数)時はこの引数と戻り値のことを理解しておかないと便利なものは作れない。

個人的にフレームワークの使い方を覚えるのが面倒なので、自作関数のたくさん入ったクラスファイルをいつも使い回している。その中からセレクトフォームを自動で生成する関数を紹介しよう。
<?php
/*
* 使い方
*
* 第一引数 … セレクトメニュー内容
* 第二引数 … 選択中にする配列番号(配列のキー値)
* 第三引数 … optionのvalueをキーにするか要素にするか
* 戻り値 … HTML文
*
*/

function makeSeletForm($array,$set,$mode = 'key'){
    if(is_array($array)){
        foreach($array as $key => $val){
            if($val){
                $value = ($mode == 'key')?$key:$val;
                $str = ($value == $set)?' selected="selected"':'';
                $form .= "<option value=\"{$value}\"{$str}>{$val}</option>\n";
            }
        }
        return $form;
    }
}

//▼使用例

$array = array('カテゴリ1','カテゴリ2','カテゴリ3');
$cate = 2;

echo '
    <select name="category">
        <option value="">-- 選択 --</option>
        '.makeSeletForm($array,$cate).'
    </select>
';

//結果はカテゴリ3が選択されたセレクトフォームが出力される
?>
この関数は第一引数と第二引数は必ず指定が必要だが、第三引数は指定がなくてもエラーはでない。関数側で第三引数に初期値を設定しているからである。

第一引数が空の時、あるいは配列でないときは戻り値が空なだけで、エラーはでない。第二引数も中身が空であってもエラーはでない。

要するになるべくエラーを出さないように考えて作られた関数だということ。便利な関数とは使い勝手や保守性?という部分も意識して「誰からも愛されるようなユーザー定義関数」を作っていくことを心がけることが大切である。

これだけのことを理解しおけば便利なユーザー定義を作ることができ、機能の複製がかなりラクになってくるハズ。