有人可以澄清如何檢查用戶定義函數中的標誌。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