gpt4 book ai didi

php - 处理 PHP 位标志

转载 作者:行者123 更新时间:2023-12-01 08:57:26 25 4
gpt4 key购买 nike

我有一个 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 - 尽管这将是微不足道的),我将不得不重写整个函数。这不可能。

有没有更好的方法来编写上面的函数,所以我所要做的就是更新标志定义,然后将额外的标志执行添加到函数中?

最佳答案

Bitwise operators

function tableLine($flag=BAT_TABLE_ROW_ALL) {
if($flag & BAT_TABLE_ROW_PLAYER)
// just return player cell
if($flag & BAT_TABLE_ROW_NOPLAYER)
// return all other cells (except fielding)
if($flag & BAT_TABLE_ROW_FIELD)
// return fielding cells

return $rtn;
}

此外,您还可以避免不断增加 ALL 标志:

define('BAT_TABLE_ROW_ALL', -1);

基本上只是将所有位设置为 1。

关于php - 处理 PHP 位标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26247489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com