3 回答
TA贡献1850条经验 获得超11个赞
PHP在编译时不执行此类操作;即使所有运算符本身都是常量,也不能将计算值分配给常量。类成员的默认值的处理方式完全相同。我在尝试将2的幂分配给常量时遇到了这种现象:
class User {
const IS_ADMIN = 1;
const IS_MODERATOR1 = 1 << 1; // Won't work
const IS_MODERATOR2 = 0x02; // works
}
TA贡献1827条经验 获得超9个赞
从PHP 5.6开始,此限制不再存在
启用先前不允许的语法的新功能称为常量标量表达式:
现在可以提供涉及在PHP先前预期的静态值的上下文,诸如常数和属性的声明和函数默认参数的数字和字符串文字和/或常数标量表达式。
class C {
const THREE = TWO + 1;
const ONE_THIRD = ONE / self::THREE;
const SENTENCE = 'The value of THREE is '.self::THREE;
public function f($a = ONE + self::THREE) {
return $a;
}
}
echo (new C)->f()."\n"; echo C::SENTENCE; ?>
上面的示例将输出:
4 The value of THREE is 3
TA贡献1853条经验 获得超9个赞
在为此大手大笑之前,请考虑一下执行模型。在php通常用于(实际上是为php设计)的环境中,所有内容都被构建,执行,然后丢弃……直到下一个http请求进入。这没有多大意义。浪费时间在解析/编译阶段进行计算。在一般情况下,发动机需要非常快。
但是,您是对的,该手册中的引用确实说“评估”。也许您应该打开文件证明。
看来php现在将在php 5.6中支持常量标量表达式:
- 3 回答
- 0 关注
- 350 浏览
添加回答
举报