jol*_*olt 1 php flags bit-manipulation
我在PHP中使用标志检测时遇到问题.
<?php
class event
{
const click = 0x1;
const mouseover = 0x2;
const mouseenter = 0x4;
const mouseout = 0x8;
const mouseleave = 0x16;
const doubleclick = 0x32;
public static function resolve($flags)
{
$_flags = array();
if ($flags & self::click) $_flags[] = 'click';
if ($flags & self::mouseover) $_flags[] = 'mouseover';
if ($flags & self::mouseenter) $_flags[] = 'mouseenter';
if ($flags & self::mouseout) $_flags[] = 'mouseout';
if ($flags & self::mouseleave) $_flags[] = 'mouseleave';
return $_flags;
}
}
var_dump(event::resolve(event::click | event::mouseleave));
var_dump(event::resolve(event::mouseleave));
Run Code Online (Sandbox Code Playgroud)
但它返回:
array (size=4)
0 => string 'click' (length=5)
1 => string 'mouseover' (length=9)
2 => string 'mouseenter' (length=10)
3 => string 'mouseleave' (length=10)
array (size=3)
0 => string 'mouseover' (length=9)
1 => string 'mouseenter' (length=10)
2 => string 'mouseleave' (length=10)
Run Code Online (Sandbox Code Playgroud)
我是bitwise运算符的新手,所以它们的定义可能会有问题.
我该如何解决?
你错误地给出了旗帜的价值; 它们是十六进制整数文字,所以它们应该是
const click = 0x01;
const mouseover = 0x02;
const mouseenter = 0x04;
const mouseout = 0x08;
const mouseleave = 0x10;
const doubleclick = 0x20;
// next values: 0x40, 0x80, 0x100, 0x200, 0x400, 0x800, 0x1000, etc.
Run Code Online (Sandbox Code Playgroud)
你也可以给它们作为十进制数字(没有0x前缀),虽然这可能会误导读取代码的人:
const click = 1;
const mouseover = 2;
const mouseenter = 4;
const mouseout = 8;
const mouseleave = 16;
const doubleclick = 32;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |