我可以这样做吗?
class Test
{
const FLAG1 = 'flag1.';
const FLAG2 = 'flag2.';
public function __construct() {}
public function myMethod($flags)
{
echo $flags
}
}
然后像
一样使用它$test = new Test();
$test->myMethod(Test::FLAG1|Test::FLAG2);
我尝试使用此示例,但我将2
作为echo
。
我很想知道如何使用CONST
或DEFINE
作为方法的参数。
我问,因为我发现这个脚本使用了这种技术,我发现它很好奇
http://www.pgregg.com/projects/php/preg_find/preg_find.php.txt
答案 0 :(得分:2)
是的,这是可能的,但不是现在的标志值。
按位运算符工作......好吧,比特。如果我1001 OR 0110
,我会1111
。因此,如果您希望能够使用这样的常量,则它们的值必须是2的幂。
const FLAG1 = '1';
const FLAG2 = '2';
const FLAG3 = '4';
然后,您可以通过AND
测试方法,将函数的参数值作为掩码。例如,如果有人通过了FLAG1|FLAG2
,您可以测试标志2:0011 AND 0010 = 0010
等于FLAG2
。在PHP中,这将是($flags & FLAG2) == FLAG2
以获取是否传递FLAG2的布尔值
您可以在此处查看所有按位运算符:http://php.net/manual/en/language.operators.bitwise.php
我还应该指出,这通常被认为是PHP编程的不良形式。为什么有更好的方法来传递多个参数呢?就个人而言,我只是接受一个数组。
这有意义吗?如果没有,请提出更详细的问题,我会跟进。