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
中可能设置的所有其他标志。