可能重复:
未解析基本语法的解决方法
我试图让开发人员指定任何位组合,以指定他们希望在响应中包含哪些数据。
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 这将是所有与日期相关的位的总和的值,因此他们只需要指定快捷方式常量而不是单独指定每个位。
我试过了,但它抛出了一个错误:
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:语法错误,意外'('
我得到的其他方法的错误是:
ErrorException:语法错误,意外 '|',期待 ',' 或 ';'
看起来 PHP 不想在常量定义中计算太多,只想要一个值而不是派生值。我假设这是基于它不想要括号也不想要 | 的事实。做进一步的计算。此外,我尝试使用 '-' 而不是 | 只是为了测试我的理论..是的,它抱怨 + 也出乎意料。
我该如何解决这个问题,以便我可以定义一个“快捷方式位”,它是其他已定义常量范围的总和。