我們通常把不經常變的值定義成常量,常量一般用全部大寫來表示,前面不加美元符號,也可減少團隊開發的出錯。那么define和const有什么區別呢?
1、const是一個語言結構;而define是一個函數,可以通過第三個參數來指定是否區分大小寫。true表示大小寫不敏感,默認為false
define('PI', 3.14, true);
2、const簡單易讀,編譯時要比define快很多。
3、const可在類中使用,用於類成員常量定義,定義后不可修改;define不能在類中使用,可用於全局變量
class MyClass { const CONS = '常量值'; function showConstant() { echo self::CONS . PHP_EOL; echo constant('CONS'); } }
4、const是在編譯時定義,因此必須處於最頂端的作用區域,不能在函數,循環及if條件中使用;而define是函數,也就是能調用函數的地方都可以使用
if (...){ const FOO = 'BAR'; // 無效的invalid } if (...) { define('FOO', 'BAR'); // 有效的valid }
5、const只能用普通的常量名,define常量名中可以有表達式
const FOO = 'BAR'; for ($i = 0; $i < 32; ++$i) { define('BIT_' . $i, 1 << $i); }
6、const定義的常量只能是靜態常量,define可以是任意表達式
const BIT_5 = 1 << 5; // valid since PHP 5.6 define('BIT_5', 1 << 5); // 有效的valid