Я хочу создать класс и расширить 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