我正在为位掩码(或者它是位域?)而苦苦挣扎。我不知道该怎么做了。
我想创建一个接受过滤内容标志的 DirectoryFilterIterator。我想我会使用这些位:
const DIR_NO_DOT = 1;
const DOT = 2;
const DIR = 3;
const FILE = 4;
因为 aDOT
也被认为是 aDIR
我也希望能够区分这两者。如果我是正确的,我认为这样的事情应该是可能的:
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() )
);
}
}
...尤其是因为我一直在否定,我有点迷路了。我怎样才能让它正常工作?