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 關注
- 378 瀏覽
添加回答
舉報