PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php按位标记检测操作大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

//嗨,我想排除按位运算的标志,但是@R_701_6618@做:
//这是标志(它们来自filesystemiterator)

define('CURRENT_AS_FILEINFO', 0);
define('CURRENT_AS_SELF', 16);
define('CURRENT_AS_PATHNAME', 32);
define('CURRENT_MODE_MASK', 240);
define('KEY_AS_PATHNAME', 0);
define('KEY_AS_FILename', 256);
define('FOLLOW_SymLINKS', 512);
define('KEY_MODE_MASK', 3840);
define('NEW_CURRENT_AND_KEY', 256);
define('SKIP_DOTS', 4096);
define('UNIX_PATHS', 8192);

用户可以潜在地设置标志的任何组合.
我需要检测是否设置了CURRENT_AS_SELF或CURRENT_AS_PATHNAME,
所以这是我到目前为止的功能

function containsPathnameOrSelfFlag($flags) {
    if ($flags & (CURRENT_AS_PATHNAME | CURRENT_AS_SELF)) {
        return true;
    }
    return false;
}

这是一个测试套件:

var_dump(containsPathnameOrSelfFlag(CURRENT_MODE_MASK | CURRENT_AS_PATHName)); // true, ok
var_dump(containsPathnameOrSelfFlag(CURRENT_AS_FILEINFO)); // false, ok
var_dump(containsPathnameOrSelfFlag(CURRENT_MODE_MASK | CURRENT_AS_FILEINFO)); // true, but false was expected, because neither CURRENT_AS_SELF nor CURRENT_AS_SELF were set, so my function is wrong

是否可以使用按位运算符使函数通过第三种情况
(它应该返回falsE)

在这里看到的问题是CURRENT_MODE_MASK的位与CURRENT_AS_SELF重叠
和CURRENT_AS_PATHNAME的位:

0000000000010000 : CURRENT_AS_SELF 
0000000000100000 : CURRENT_AS_PATHNAME 
0000000011110000 : CURRENT_MODE_MASK 
0000000100000000 : KEY_AS_FILename
0000001000000000 : FOLLOW_SymLINKS
0000111100000000 : KEY_MODE_MASK
0000000100000000 : NEW_CURRENT_AND_KEY
0001000000000000 : SKIP_DOTS
0010000000000000 : UNIX_PATHS

因此,每次用户将CURRENT_MODE_MASK添加到标志时,我的函数
会认为CURRENT_AS_SELF和CURRENT_AS_PATHNAME也已设置,尽管并非如此.
我不知道该怎么解决.

解决方法:

掩码是针对测试的当前值进行“与”运算,而不是针对生成的新值进行“与”运算.如果要测试是否存在或仅使用单个标志,则仅使用该标志.

大佬总结

以上是大佬教程为你收集整理的php按位标记检测操作全部内容,希望文章能够帮你解决php按位标记检测操作所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: