【发布时间】:2016-05-12 17:24:31
【问题描述】:
有人能说明如何检查用户定义函数中的标志吗?
这些常量是预定义的全局标志。
- 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显示为 set ? - 在测试二中,为什么
GLOB_BRACE,GLOB_MARK,GLOB_NOSORT和GLOB_NOCHECK显示为 set ? -
var_dump($flags)的值代表什么(这个数字是从哪里来的)?
How to implement a bitmask in php? 是我开始的地方,我从接受的答案构建我的示例。不幸的是,它没有解释上述任何一点。
编辑:
标志必须是 2 的幂才能正确按位或组合在一起。PHP function flags, how?
这应该可以解决问题
define('GLOB_CUSTOM', 64);
【问题讨论】:
-
这甚至不会为我运行。
define('GLOB_CUSTOM', 092364023760); #PHP Parse error: Invalid numeric literal in php shell code on line 1。其他一切似乎都符合预期。 -
以
0开头的数字被认为是八进制(参见link)。该系统中没有9(或8,为了完整起见),因此它是无效的。在 PHP7 之前,这被默默地忽略并视为零。请参阅链接中的红色警告。您的GLOB_CUSTOM实际上是0。
标签: php logical-operators