Php 将多个defines或const作为参数传递给类方法

Php 将多个defines或const作为参数传递给类方法,php,Php,我可以这样做吗 class Test { const FLAG1 = 'flag1.'; const FLAG2 = 'flag2.'; public function __construct() {} public function myMethod($flags) { echo $flags } } 然后像这样使用它 $test = new Test(); $test->myMethod(Test::FLAG1|Te

我可以这样做吗

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
作为方法的参数

我这样问是因为我发现这个脚本使用了这种技术,我觉得很奇怪


是的,这是可能的,但不适用于您现在拥有的标志值

位运算符处理。。。好吧,这些零碎。如果我做了
1001或0110
,我会得到
1111
。因此,如果您希望能够像这样使用常量,它们的值必须是2的幂

const FLAG1 = '1';
const FLAG2 = '2';
const FLAG3 = '4';
然后,您可以通过
将函数的参数值添加到掩码来测试该方法。例如,如果有人通过了
FLAG1 | FLAG2
,您可以测试等于
FLAG2
的标志2:
0011和0010=0010
。在PHP中,这将是
($flags&FLAG2)=FLAG2
,以获取是否传入FLAG2的布尔值

您可以在此处看到所有按位运算符:

我还应该指出,对于PHP编程来说,这通常被认为是糟糕的形式。当有更好的方法传递多个参数时,为什么要这样做?就我个人而言,我只接受数组


这有意义吗?如果没有,请提出更详细的问题,我会跟进。

如果您删除位运算符
|
,只传入一个标志,这将起作用。是的,但我的事情是,我想看看这家伙是如何实现他的魔法的:是的,但他没有传递参数,他在做位运算-我理解,我通常接受和数组作为我的参数,但我试图创建一些独特的、在理论上不同的东西。但是如果你能详细解释一下为什么我需要检查
($flags&FLAG2)=FLAG2
我就不能检查
FLAG2
?@Eli,不,因为
FLAG2
。当您将
标记2
标记$flags
放在一起时,您将得到一个等于所有
0
的值,或者您将得到一个等于
标记2
的值。同样,
1和1=1
,以及
0和1=0
。基本上,您使用
操作作为过滤器,过滤掉传递给函数的
$flags
中可能设置的所有其他标志。