我想创建一个类并扩展一个 PHP 类 FilesystemIterator,如下面的代码所示。我定义了一个方法 hasFlag() 并测试它是否包含一个标志(我希望它像其他一些 PHP 函数,例如 glob),但结果总是与预期不同。那么我该如何解决这个问题呢?
class c extends FilesystemIterator
{
/* These are parent constants */
const CURRENT_AS_FILEINFO = 0 ;
const KEY_AS_PATHNAME = 0 ;
const CURRENT_AS_SELF = 16 ;
const CURRENT_AS_PATHNAME = 32 ;
const CURRENT_MODE_MASK = 240 ;
const KEY_AS_FILENAME = 256 ;
const NEW_CURRENT_AND_KEY = 256 ;
const FOLLOW_SYMLINKS = 512 ;
const KEY_MODE_MASK = 3840 ;
const SKIP_DOTS = 4096 ;
const UNIX_PATHS = 8192 ;
public function __construct($flags) {
$this->flags = $flags;
}
public function hasFlag($flag) {
//How do I test $this->flags it contains a $flag???
return ($this->flags & $flag) ? true : false;
}
}
$c = new c(
c::CURRENT_AS_FILEINFO |
c::KEY_AS_PATHNAME |
c::CURRENT_AS_SELF |
c::CURRENT_AS_PATHNAME |
c::CURRENT_MODE_MASK |
c::KEY_AS_FILENAME |
c::NEW_CURRENT_AND_KEY |
c::FOLLOW_SYMLINKS |
c::KEY_MODE_MASK |
c::SKIP_DOTS |
c::UNIX_PATHS
);
var_dump($c->hasFlag(c::CURRENT_AS_FILEINFO));
编辑 1
为什么会这样??
var_dump( ((0 | 16 | 32 | 240 | 3840) & 0) == 0 ); //true
var_dump( ((0 | 16 | 32 | 240 | 3840) & 32) == 32 ); //true
var_dump( ((0 | 16 | 32 | 240 | 3840) & 240) == 240 ); //true
var_dump( ((0 | 16 | 32 | 240 | 3840) & 1024) == 1024 ); //true??
var_dump( ((0 | 16 | 32 | 240 | 3840) & 2048) == 2048 ); //true??
var_dump( ((0 | 16 | 32 | 240 | 3840) & 3840) == 3840 ); //true