さて、たまには技術系の記事でも。
PHPは、関数の引数を可変にすることが出来るのを利用した手法です。
まず、以下の様なコードがありました。
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
<?phpfunction test($val)
{
return mb_strlen($val);
}
このコードに対して、「任意の文字コードを指定したい」という要望があった場合にどうするか。
そして、このコードが「100箇所」で呼ばれていたら?
また、100箇所全てではなく、一部の呼び出し箇所でだけ文字コードを指定したかったら?
他にも方法がありそうですけど、私が導き出したのは以下の手法でした。
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
<?phpfunction test($val, $enc = NULL)
{
if (NULL === $enc)
{
return mb_strlen($val);
}
else
{
return mb_strlen($val, $enc);
}
}
これで、呼び出し側が「$len = test($val);」とか「$len = test($val, 'UTF-8');」とかになっていても、
どちらでも問題なし。
あと、mysqliのfetch_arrayみたく引数に定数名を指定する場合は、
呼び出し側の引数を「定数名と同じ文字列」にして、
$mysqli_resultオブジェクト->fetch_array(constant($引数で渡されてきた定数名の文字列));
とかしたりもあります。
他の言語(例えばJava)なら、オーバーロードという言語仕様を用いれば良いんですけど、
PHPは出来ない(5.4.8で確認済み)ので、じゃあこういう方法になるかなぁと。