3 回答

TA貢獻1853條經驗 獲得超6個贊
PHP在編譯時不執行此類操作;即使所有運算符本身都是常量,也不能將計算值分配給常量。類成員的默認值的處理方式完全相同。我在嘗試將2的冪分配給常量時遇到了這種現象:
class User {
const IS_ADMIN = 1;
const IS_MODERATOR1 = 1 << 1; // Won't work
const IS_MODERATOR2 = 0x02; // works
}

TA貢獻1808條經驗 獲得超4個贊
從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貢獻1818條經驗 獲得超3個贊
在為此大手大笑之前,請考慮一下執行模型。在php通常用于(實際上是為php設計)的環境中,所有內容都被構建,執行,然后丟棄……直到下一個http請求進入。這沒有多大意義。浪費時間在解析/編譯階段進行計算。在一般情況下,發動機需要非???。
但是,您是對的,該手冊中的引用確實說“評估”。也許您應該打開文件證明。
看來php現在將在php 5.6中支持常量標量表達式:
- 3 回答
- 0 關注
- 299 瀏覽
添加回答
舉報