我不确定位掩码是否是正确的术语,请让我解释一下:
在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页面 这里 找到了术语“位掩码(bitmask)”。
总之,我实现了一个简单的方法,称为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 );
在测试中,我该如何实现检测调用了哪些标志?
$flags & FLAG_1
- 检查是否设置了FLAG_1,$flags | FLAG_1
- 设置FLAG_1,$flags & ~FLAG_1
- 取消设置FLAG_1,~$flags
- 反转标志。 - Konstantin Pereiaslovdefine('FLAG_1', 1<<0); define('FLAG_2', 1<<2); define('FLAG_3', 1<<3); define('FLAG_4', 1<<4);
这通常是在C中完成的方式。 - AmitPconst
关键字不支持表达式,即使结果是常量(例如const FLAG_1 = 1 << 0;
是一个解析错误)。显然这与define()
无关。2)在 C 中,像const int FLAG_1 = 1 << 0;
这样的常量表达式将在编译时解析,实际编译值将是表达式的结果,而在 PHP 中,这将每次都被评估,会导致微小的性能损失。虽然这些问题都不是避免使用您建议的更可读版本的好理由。 - DaveRandomconst IS_WINDOWS = \PHP_OS & "\xDF\xDF\xDF" === 'WIN';
这等同于非常常见的stripos(\PHP_OS, 'WIN') === 0
,不过是在编译时进行操作。目前看来这样做没有意义(所有的Windows版本上PHP_OS都为'WINNT'),但我猜这有将来的用途... - DaveRandom