如何在 php 中实现位掩码?

2024-04-13

我不确定位掩码是否是正确的术语。让我解释:

在 PHP 中,error_reporting函数可以通过多种方式调用:

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL ^ E_NOTICE);

我从 php.net 页面获取了术语“位掩码”here http://php.net/manual/en/function.error-reporting.php

无论如何,重点是,我实现了一个简单的方法,称为ls它返回目录的内容。

该函数需要 3 个参数... ( $include_hidden = false, $return_absolute = false, $ext = false )

因此,当我调用该函数时,我设置了我想要的结果。我是否希望结果返回隐藏目录,是否只需要基名等。

所以当我调用我正在编写的函数时

ls(true, false, true)
ls(false, false, true)
ls(true, true, true)
etc...

我认为如果我可以标记我希望如何返回数据,那么它会更具可读性吗?

所以像这样:

ls( INCLUDE_HIDDEN | HIDE_EXTS );
ls( SHOW_ABSOLUTE_PATHS | HIDE_EXTS );

etc...

我将如何在测试哪些标志被调用方面实现这一点?


其实很简单。首先用一些代码来演示如何实现它。如果您不明白这段代码的作用或工作原理,请随时在评论中提出其他问题:

const FLAG_1 = 0b0001; // 1
const FLAG_2 = 0b0010; // 2
const FLAG_3 = 0b0100; // 4
const FLAG_4 = 0b1000; // 8
// Can you see the pattern? ;-)

function show_flags ($flags) {
  if ($flags & FLAG_1) {
    echo "You passed flag 1!<br>\n";
  }
  if ($flags & FLAG_2) {
    echo "You passed flag 2!<br>\n";
  }
  if ($flags & FLAG_3) {
    echo "You passed flag 3!<br>\n";
  }
  if ($flags & FLAG_4) {
    echo "You passed flag 4!<br>\n";
  }
}

show_flags(FLAG_1 | FLAG_3);

Demo http://3v4l.org/tTZnW


由于标志是整数,因此在 32 位平台上最多可以定义 32 个标志。在 64 位平台上,它是 64。也可以将标志定义为字符串,在这种情况下,可用标志的数量或多或少是无限的(当然,在系统资源的范围内)。下面是它在二进制中的工作原理(为了简单起见,减少到 8 位整数)。

FLAG_1
Dec:    1
Binary: 00000001

FLAG_2
Dec:    2
Binary: 00000010

FLAG_3
Dec:    4
Binary: 00000100

// And so on...

当您组合标志以将它们传递给函数时,您可以将它们组合在一起。让我们看看当我们通过时会发生什么FLAG_1 | FLAG_3

  00000001
| 00000100
= 00000101

当您想查看设置了哪些标志时,您可以将位掩码与标志相与。那么,让我们看看上面的结果是否FLAG_3已设置:

  00000101
& 00000100
= 00000100

...我们得到标志的值,一个非零整数 - 但如果我们看看FLAG_2已设置:

  00000101
& 00000010
= 00000000

...我们得到零。这意味着在检查值是否已传递时,您可以简单地将 AND 运算的结果评估为布尔值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 php 中实现位掩码? 的相关文章

随机推荐

  • R中不等长度列表的平均值

    我有不等长度的向量列表 我想要的是平均值 在每个索引处 例如 a c 2 3 4 b c 2 3 4 5 c c 5 0 3 4 6 avg a b c c 9 3 6 3 11 3 9 2 6 1 如何在 R 中实现这一点 我们可以将向量
  • 如何在 Java Swing 中自动滚动到底部

    我有一个简单的 JPanel 上面有一个 JScrollPane 根据需要带有垂直滚动条 东西被添加到 JPanel 或从中删除 当它超出面板底部时 我希望 JScrollPane 根据需要自动向下滚动到底部 或者如果某些组件离开面板则向上
  • javascript focus() 在 Firefox 和 IE 上不起作用?

    我正在尝试显示一个表单并聚焦它 由于某种原因它只适用于 Chrome 我怎样才能让它跨浏览器工作 div div
  • 客户端验证不会针对 CompareAttribute DataAnnotation 触发

    我正在布置一个比较两个密码字符串的视图 我的模型之一的两个属性非常简单 Required RegularExpression S ErrorMessage White space is not allowed StringLength 20
  • 方法和内部类同名(错误:...与先前的声明冲突)

    我打算有一个类 它有一个内部类和一个名称相似的方法 的代码为example1 cpp即使我有一个内部类和一个同名的方法 编译也没有问题B While example2 cpp如果我重命名将不起作用Position to position用小
  • Kotlin - 在 Android 中转换 Singleton DatabaseController 的最佳方式

    我正在通过 Kotlin in Action 学习 Kotlin 并且正在慢慢地将 Android 应用程序代码转换为它 但我在转换下面的类时发现了一些问题 public class DatabaseController private s
  • VueJS:使用对象文字与返回对象的函数定义“数据”

    定义之间有什么区别data对象可以通过以下方式 1 使用对象字面量 data title Helly VueJS 2 函数返回对象 data return title Helly VueJS 来自文档 https v2 vuejs org
  • 如何使用 pyinstaller 创建最小大小的可执行文件?

    我使用的是 Windows 10 安装了 anaconda 但我想使用 python 3 5 在一个新的 干净的最小环境中独立创建一个可执行文件 所以我做了一些测试 测试1 我在文件夹 testenv 中创建了一个 python 脚本 te
  • 在mysql中选择两个独立的表[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 results mysqli gt query SELECT product name price FROM herbs an WHERE
  • 双倍的 Pow 实现

    我正在开发一个用于运动控制的代码 但我遇到了 pow 函数的问题 我使用VS2010作为IDE 这是我的问题 我有 double p 100 0000 double d 1000 0000 t1 pow p 8 0000 d 1 00 4
  • YouTube.Builder 的正确使用方法

    我需要获取用户 YouTube 视频 这是我的代码 仅尝试获取用户 YouTube 频道 但它不起作用 选择帐户后 加载Youtube频道总是抛出错误 我读了这个answer https stackoverflow com a 214077
  • 如何使用类库中的控制器?

    我在类库中有控制器 但我无法弄清楚如何让主项目识别它们 主项目引用了我的类库 我需要在某处注册它们吗 我想同时使用控制器和 ApiController EDIT 路线配置 创建项目后未更改 public class RouteConfig
  • 在 swift 中将 UIImage 转换为 base64 字符串

    我正在尝试将 UIImage 转换为 base64 字符串 目的是将其上传到后端服务器 然而 我在这篇文章中找到的转换代码 应该是Apple自己的实现 生成了一个无效的字符串 UIImage 和 Base64 字符串之间的转换 https
  • Javafx程序可以通过GUI和命令行控制吗?

    我正在使用 Javafx GUI 但我也需要来自命令行的相同级别的功能 我想知道创建一个同时具有命令行和 Javafx 功能的主类的最佳方法是什么 这样您就可以在 GUI 上做一件事 然后在命令行上做下一件事 命令行还会更新 GUI 显示
  • CSV 日期格式

    我有一个 VB 应用程序 它提取数据并创建 3 个 CSV 文件 a csv b csv c csv 然后我使用另一个 Excel 电子表格 import xls 将上述 CSV 文件中的所有数据导入到此工作表中 import xls 文件
  • 使用 python 进行多元线性回归

    我想用 python 计算多元线性回归 我找到了这个简单线性回归的代码 import numpy as np from matplotlib pyplot import x np array 1 2 3 4 5 y np array 2 3
  • 无法启动服务器。服务器实例未配置

    在尝试为我的项目设置 tomcat 服务器时 出现以下错误 请参阅下面的完整堆栈跟踪 java lang ClassNotFoundException com springsource tcserver serviceability dep
  • libstdc++.so.6 与 cuda 相关的链接器问题

    今天我在链接我编译的 cuda 内容时遇到了问题 我有一个最新的 debian 测试 w 2 6 32 3 amd64 我整天都在写我的代码 不时编译 没有问题 但在进行了较小的代码更改后 我收到以下错误 gcc o pa CUDA o h
  • 在 ASP.Net Core 2 MVC 中禁用模型验证的正确方法

    使用扩展方法设置 MVC services AddMvc 然后在控制器中 这也可能适用于 GET 使用主体中提供的参数创建 POST 操作的方法 例如 HttpPost save public Entity Save FromBody En
  • 如何在 php 中实现位掩码?

    我不确定位掩码是否是正确的术语 让我解释 在 PHP 中 error reporting函数可以通过多种方式调用 Report simple running errors error reporting E ERROR E WARNING