您需要按位运算AND
符&
:
define('FLAGA',40);
define('FLAGB',10);
define('FLAGC',3);
function foo($sFile, $vFlags) {
if ($vFlags & FLAGA) {
echo "FLAGA is set\n";
}
if ($vFlags & FLAGB) {
echo "FLAGB is set\n";
}
if ($vFlags & FLAGC) {
echo "FLAGC is set\n";
}
}
foo('test.txt',FLAGA | FLAGB | FLAGC);
演示
也就是说,按位运算必须以二进制形式工作,其中每个位代表 2 的幂。因此,您通常会希望以 2 的幂定义标志,如
define('FLAGA',1);
define('FLAGB',2);
define('FLAGC',4);
define('FLAGD',8); // etc.
否则,想象一下这种情况:
define('FLAGA',8);
define('FLAGB',32);
define('FLAGC',40);
如果你有一个值 40 $vFlags
,你就无法知道设置了哪些标志;它可以是以下任何一种:
FLAGA & FLAGB
FLAGA & FLAGB & FLAGC
FLAGA & FLAGC
FLAGB & FLAGC
FLAGC