有人可以澄清如何检查用户定义函数中的标志。PHP:检查在用户定义函数中设置了哪些标志
这些常量是预定义的glob标志。
- GLOB_BRACE
- GLOB_MARK
- GLOB_NOSORT
- GLOB_NOCHECK
- GLOB_NOESCAPE
- GLOB_ERR
- GLOB_ONLYDIR
,我已经创建了一个新只是为了测试。
define('GLOB_CUSTOM', 123);
我也曾尝试
define('GLOB_CUSTOM',0b1111011);
的结果是一样的。
该函数执行传递的标志的var_dump。
function flags_test($flags = NULL) {
echo '$flags argument<br>';
var_dump($flags); // int 1073746108
echo '<br>';
if($flags & GLOB_BRACE){
echo 'FLAG : "GLOB_BRACE" is set';
var_dump(GLOB_BRACE);
echo '<br>';
}
if($flags & GLOB_MARK){
echo 'FLAG : "GLOB_MARK" is set';
var_dump(GLOB_MARK);
echo '<br>';
}
if($flags & GLOB_NOSORT){
echo 'FLAG : "GLOB_NOSORT" is set';
var_dump(GLOB_NOSORT);
echo '<br>';
}
if($flags & GLOB_NOCHECK){
echo 'FLAG : "GLOB_NOCHECK" is set';
var_dump(GLOB_NOCHECK);
echo '<br>';
}
if($flags & GLOB_NOESCAPE){
echo 'FLAG : "GLOB_NOESCAPE" is set';
var_dump(GLOB_NOESCAPE);
echo '<br>';
}
if($flags & GLOB_ERR){
echo 'FLAG : "GLOB_ERR" is set';
var_dump(GLOB_ERR);
echo '<br>';
}
if($flags & GLOB_ONLYDIR){
echo 'FLAG : "GLOB_ONLYDIR" is set';
var_dump(GLOB_ONLYDIR);
echo '<br>';
}
if($flags & GLOB_CUSTOM){
echo 'FLAG : "GLOB_CUSTOM" is set';
var_dump(GLOB_CUSTOM);
echo '<br>';
}
}
测试一。
flags_test(GLOB_ONLYDIR); // test one
结果
$flags argument
int 168
FLAG : "GLOB_BRACE" is set
int 128
FLAG : "GLOB_MARK" is set
int 8
FLAG : "GLOB_NOSORT" is set
int 32
FLAG : "GLOB_CUSTOM" is set
int 123
测试二。
flags_test(GLOB_CUSTOM);
结果
$flags argument
int 251
FLAG : "GLOB_BRACE" is set
int 128
FLAG : "GLOB_MARK" is set
int 8
FLAG : "GLOB_NOSORT" is set
int 32
FLAG : "GLOB_NOCHECK" is set
int 16
FLAG : "GLOB_CUSTOM" is set
int 123
我有几个问题。
- 在测试之一为什么
GLOB_CUSTOM
显示为设置? - 在测试二中为什么是
GLOB_BRACE
,GLOB_MARK
,GLOB_NOSORT
和GLOB_NOCHECK
显示为set? var_dump($flags)
代表什么值(该数字来自哪里)?
How to implement a bitmask in php?是我开始的地方,我从接受的答案构建我的例子。不幸的是,它没有解释上述任何一点。
编辑:
Flags must be powers of 2 in order to bitwise-or together properly. PHP function flags, how?
这应该解决
define('GLOB_CUSTOM', 64);
这甚至不会为我运行。 'define('GLOB_CUSTOM',092364023760); #PHP解析错误:第1行上的php shell代码中的数字文字无效。其他一切似乎都如预期。 – miken32
[如何在php中实现位掩码?](http://stackoverflow.com/questions/11880360/how-to-implement-a-bitmask-in-php) – miken32
以'0开头的数字被认为是八进制(参见[link](http://php.net/manual/en/language.types.integer.php))。该系统中没有“9”(或者完整性为“8”),因此它是无效的。在PHP7之前,这被默默地忽略并被视为零。查看链接中的红色警告。你的'GLOB_CUSTOM'实际上是'0'。 – ccKep