php
定義常量的方式有兩種define
和const
,二者有什麼區別?php
const CONSTANCE = 'const'; define('CONSTANCE', 'const');
const
關鍵字從php 5.3之後能夠在類定義以外定義常量const
能夠在類內部定義,而define
不行。const
定義的常量在當前的命名空間中,而define
要定義執行的命名空間,必須寫出具體命名空間。數組
class Foo { const BAR = 2; } class Foo2 { define("BAR", 3); //無效的 } //命名空間的示例 namespace A{ const A1 = 1; //處在命名空間A中 define('A2', 2); //全局可調用 define('A\A3', 3); //處在命名空間A中 } namespace B{ use const \A\A1; use const \A\A3; echo A1; echo A2; //全局調用 echo A3; }
const
是在編譯階段定義常量,define
是在預處理階段定義常量const
在編譯階段就定義了常量,定義常量時必須處於最頂端的做用區域。
因此不能再if
等條件語句中定義。spa
define
定義常量,又叫宏定義,宏
能夠描述爲根據一系列預約義的規則替換必定的文本模式。define
能夠在分支中存在。code
理論上,使用const
處理速度比define
會快一點點。ip
const
只接受標量數據,(如integer, string, boolean和float等);define
能夠接受任意表達式define('BIT_5', 1<<5); const BIT_5 = 1<<5; //5.6以後纔有效
從php 5.6起,const
也能夠接受數組和表達式
define
能夠接受resource
類型,const
不行
const
常量名只能是簡單字符,define
能夠是任意表達式const STR = 'string'; $i = 1; define("STR_" . $i, STR);
const
大小寫敏感,define
能夠經過第三個傳參控制大小寫敏感。const
和define
定義的常量數組是否能改變其中的元素?defined
來檢查const
定義的常量?define vs const
宏