php - 在类常量 PHP 中组合位标志

标签 php bit-manipulation class-constants

<分区>

Possible Duplicate:
Workaround for basic syntax not being parsed

我正在尝试允许开发人员指定位的任意组合,以指定他们希望在响应中包含哪些数据。

    class ClassName {
            const BUILD_DATE_RFC = 1; 
            const BUILD_DATE_SQL = 2;
            const BUILD_DATE_SQLTIME = 4;
            const BUILD_DATE_UNIX = 8;

           // ....
   }

这在某种意义上是有效的,当我像这样实例化类时:

$whatever = new ClassName(BUILD_DATE_RFC|BUILD_DATE_SQL);

这个逻辑将被执行:

    if (self::BUILD_DATE_RFC & $this->metaBits) {   
        $dateMeta['RFC'] = date('r');
    }
    if (self::BUILD_DATE_SQL & $this->metaBits) {
        $dateMeta['SQL'] = date('Y-m-d');
    }
    if (self::BUILD_DATE_SQLTIME & $this->metaBits) {
        $dateMeta['SQL_time'] = date('Y-m-d H:i:s');
    }

所有这些都很好用,除了我想定义像 BUILD_DATE_ALL 这样的“快捷方式位”,它是所有 DATE 相关位的总和的值,所以他们只需要指定快捷方式常量而不是每个单独。

我试过了,但它抛出了一个错误:

const BUILD_DATE_ALL =  (self::BUILD_DATE_RFC|self::BUILD_DATE_SQL|self::BUILD_DATE_SQLTIME|self::BUILD_DATE_UNIX);

我也尝试了不同的方法/语法:

const BUILD_REQUEST_ALL =   self::BUILD_IP |
                self::BUILD_USERAGENT |
                self::BUILD_REFERER;

还有我尝试过的另一种方法:

const BUILD_DEFAULT = self::BUILD_DATE_ALL|self::BUILD_REQUEST_ALL^self::BUILD_REFERER^self::BUILD_USERAGENT;

我得到的错误是:

ErrorException: syntax error, unexpected '('

我得到的其他方法的错误是:

ErrorException: syntax error, unexpected '|', expecting ',' or ';'

看起来 PHP 不想在常量定义中计算太多,只想要单个值而不是派生值。我假设这是基于它不需要括号也不需要 | 的事实。做进一步的计算。此外,我尝试使用 '-' 而不是 |只是为了检验我的理论。是的,它也提示 + 出乎意料。

我该如何着手解决这个问题,以便我可以定义一个“快捷方式位”,它是一系列其他已定义常量的总和。

最佳答案

你可以自己计算。由于这些是位标志,因此存在一种模式。

class ClassName {
        const BUILD_DATE_RFC = 1; 
        const BUILD_DATE_SQL = 2;
        const BUILD_DATE_SQLTIME = 4;
        const BUILD_DATE_UNIX = 8;
        const BUILD_DATE_ALL = 15; // 15 = 1|2|4|8;
       // ....
}

关于php - 在类常量 PHP 中组合位标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9007017/

相关文章:

php - 在php中获取类常量名称?

c++ - 直接从另一个类实例化时成员整数发生变化

php - 64 位 xampp windows 10 中带有 .htaccess 的搜索引擎友好 URL

javascript - AJAX + PHP 表单不传递变量?

C 程序设计 - XOR 按位运算

c - 如何从 C 中的整数值中逐位获取数据?

c++ - CUDA channel ID 与基于 threadIdx.x 的计算

delphi - 从 Delphi 中的类引用变量访问类常量

php - preg_replace 是否成功

php - 关闭网站中的 mysql 连接有多重要,为什么?