【发布时间】:2011-03-20 09:47:23
【问题描述】:
我正在为位掩码(或者它是位域?)而苦苦挣扎。我不知道该怎么做了。
我想创建一个 DirectoryFilterIterator 接受过滤内容的标志。我想我会使用这些位:
const DIR_NO_DOT = 1;
const DOT = 2;
const DIR = 3;
const FILE = 4;
因为DOT 也被认为是DIR,所以我也希望能够区分这两者。如果我是正确的,我认为这样的事情应该是可能的:
DirectoryFilterIterator::DIR & ~DirectoryFilterIterator::DOT
换句话说,这应该过滤掉DIR,除非它是DOT。但我完全不知道如何让过滤工作(在accept 方法中):
class DirectoryFilterIterator
extends FilterIterator
{
const DIR_NO_DOT = 1;
const DOT = 2;
const DIR = 3;
const FILE = 4;
protected $_filter;
public function __construct( DirectoryIterator $iterator, $filter = self::DIR )
{
parent::__construct( $iterator );
$this->_filter = $filter;
}
public function accept()
{
$item = $this->getInnerIterator()->current();
return (
!( ( $this->_filter & self::DOT ) == self::DOT && $item->isDot() ) &&
!( ( $this->_filter & self::DIR ) == self::DIR && $item->isDir() ) &&
!( ( $this->_filter & self::FILE ) == self::FILE && $item->isFile() )
);
}
}
...尤其是因为我正在进行的所有否定,我有点迷失了。我怎样才能让它正常工作?
【问题讨论】:
标签: php bit-fields bitmask filter-iterator