インスタンスをテーブル行に出力するメソッドを持つ PHP クラスがあります。先頭に名前を付けずに行を印刷したい場合もあれば、すべての行項目を印刷したい場合もあります。
コードを読みやすくするためにビット フラグを使用することにしましたが、フラグの扱いがひどいようです。ビット フラグを使用するのはこれが初めてです。
クラスの先頭で次のようにフラグを定義しました。
define('BAT_TABLE_ROW_PLAYER', 1);
define('BAT_TABLE_ROW_NOPLAYER', 2);
define('BAT_TABLE_ROW_FIELD', 4);
define('BAT_TABLE_ROW_ALL', 7);
フラグを使用する関数は次のようになります。
function tableLine($flag=BAT_TABLE_ROW_ALL) {
if(in_array($flag,[1,3,5,7]))
// just return player cell
if(in_array($flag,[2,3,6,7]))
// return all other cells (except fielding)
if(in_array($flag,[4,5,6,7]))
// return fielding cells
return $rtn;
}
ご覧のとおり、BAT_TABLE_ROW_ALL
が設定されている場合、すべてのオプションが計画どおりに実行されます。
問題は、何らかの理由で別のフラグを追加する場合 (したがって、それを 8 に設定し、ALL を 15 に設定する - 現状では些細なことですが)、関数全体を書き直さなければならないことです。これは正しくありません。
上記の関数を記述するためのより良い方法はありますか?フラグ定義を更新してから、関数に追加のフラグ実行を追加するだけです?