3 回答
![?](http://img1.sycdn.imooc.com/545845d30001ee8a02200220-100-100.jpg)
TA贡献1784条经验 获得超8个赞
PHP在编译时不执行此类操作;即使所有运算符本身都是常量,也不能将计算值分配给常量。类成员的默认值的处理方式完全相同。我在尝试将2的幂分配给常量时遇到了这种现象:
class User {
const IS_ADMIN = 1;
const IS_MODERATOR1 = 1 << 1; // Won't work
const IS_MODERATOR2 = 0x02; // works
}
![?](http://img1.sycdn.imooc.com/5458463b0001358f02200220-100-100.jpg)
TA贡献1777条经验 获得超3个赞
从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
![?](http://img1.sycdn.imooc.com/5333a0aa000121d702000200-100-100.jpg)
TA贡献1796条经验 获得超4个赞
在为此大手大笑之前,请考虑一下执行模型。在php通常用于(实际上是为php设计)的环境中,所有内容都被构建,执行,然后丢弃……直到下一个http请求进入。这没有多大意义。浪费时间在解析/编译阶段进行计算。在一般情况下,发动机需要非常快。
但是,您是对的,该手册中的引用确实说“评估”。也许您应该打开文件证明。
看来php现在将在php 5.6中支持常量标量表达式:
- 3 回答
- 0 关注
- 446 浏览
添加回答
举报