奇特なブログ

「殊勝に値する行いや心掛け」を意味する、奇特な人になる為のブログです

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

リファクタリング手法その1

さて、たまには技術系の記事でも。

PHPは、関数の引数を可変にすることが出来るのを利用した手法です。
まず、以下の様なコードがありました。

-----------------------------------------------------------------------------------------

<?php

function test($val)
{
return mb_strlen($val);
}

-----------------------------------------------------------------------------------------

このコードに対して、「任意の文字コードを指定したい」という要望があった場合にどうするか。
そして、このコードが「100箇所」で呼ばれていたら?
また、100箇所全てではなく、一部の呼び出し箇所でだけ文字コードを指定したかったら?

他にも方法がありそうですけど、私が導き出したのは以下の手法でした。

-----------------------------------------------------------------------------------------

<?php

function 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で確認済み)ので、じゃあこういう方法になるかなぁと。

スポンサーサイト

テーマ:日記 - ジャンル:日記

  1. 2013/04/06(土) 20:27:00|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
<<モテるのに処女な女の心の内側 | ホーム | だろうねぇ>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://kitoku1.blog129.fc2.com/tb.php/197-b78c6e71
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。