所謂常量是一個簡單的標識符。在指令碼執行期間該值不能改變。常量預設大小寫敏感。通常常量標識符總是大寫的。常量只能包含標量資料(boolean、integer、float和string)。可以定義resource常量,但應盡量避免,因為會造成不可預料的結果。
define部分
宏不僅可以用來代替常數值,還可以用來代替運算式,甚至是程式碼片段。(宏的功能很強大,但也容易出錯,所以其利弊大小頗有爭議。)
宏的文法為:
#define 宏名稱 宏值
作為一種建議和一種廣大程式員共同的習慣,宏名稱經常使用全部大寫的字母。
利用宏的優點:
1)讓代碼更簡潔明了
當然,這有賴於你為宏取一個適當的名字。一般來說,宏的名字更要注重有明確直觀的意義,有時寧可讓它長點。
2)方便代碼維護
對宏的處理,在編譯過程中稱為“預先處理”。也就是說在正式編譯前,編譯器必須先將代碼出現的宏,用其相應的宏值替換,這個過程有點你我在文文書處理軟體中的尋找替換。所以在代碼中使用宏表達常數,歸根結底還是使用了立即數,並沒有明確指定這個量的類型。
const部分
常量定義的格式為:
const 資料類型 常量名 = 常量值;
而const定義的常量具有資料類型,定義資料類型的常量便於編譯器進行資料檢查,使程式可能出現錯誤進行排查。常量必須一開始就指定一個值,然後,在以後的代碼中,我們不允許改變此常量的值。
const與define兩者之間的區別:
記憶體空間的分配上。define進行宏定義的時候,不會分配記憶體空間,編譯時間會在main函數裡進行替換,只是單純的替換,不會進行任何檢查,比如類型,語句結構等,即宏定義常量只是純粹的置放關係,如#define null 0;編譯器在遇到null時總是用0代替null它沒有資料類型(還有疑問請找C語言書籍看預先處理部分或者看MSDN.而const定義的常量具有資料類型,定義資料類型的常量便於編譯器進行資料檢查,使程式可能出現錯誤進行排查,所以const與define之間的區別在於const定義常量排除了程式之間的不安全性.
使用const使得代碼簡單易讀,const本身就是一個語言結構,而define是一個函數。另外const在編譯時間要比define快很多。
1、const用於類成員變數的定義,一經定義,不可修改。Define不可以用於類成員變數的定義,可用於全域常量。
2、Const可在類中使用,define不能
3、Const不能再條件陳述式中定義常量,代碼如下顯示:
<?phpif (...){const FOO = 'BAR'; // 無效的invalid}if (...) {define('FOO', 'BAR'); // 有效valid}?>
4、const採用普通的常量名稱,define可以採用運算式作為名稱,代碼如下顯示:
<?phpconst FOO = 'BAR';for ($i = 0; $i < 32; ++$i) {define('BIT_' . $i, 1 << $i);}?>
5、const只能接受靜態標量,而define可以採用任何錶達式,代碼如下顯示:
<?phpconst BIT_5 = 1 << 5; // 無效的invaliddefine('BIT_5', 1 << 5); // 有效valid?>
6、const定義的常量時大小寫敏感,而define可以通過第三個參數(為true表示大小寫不敏感)來指定大小寫是否敏感,代碼如下顯示:
<?phpdefine('FOO', 'BAR', true);echo FOO; // BARecho foo; // BAR?>