你需要按位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);
DEMO
這就是說,按位操作必然在以下方面工作二進制,其中每個位代表2的冪。因此,您通常會想要d以2的冪efine標誌,如
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