詳解php常量const與define的區別和實例

所謂常量是一個簡單的標識符。在腳本執行期間該值不能改變。常量默認大小寫敏感。一般常量標識符老是大寫的。常量只能包含標量數據(boolean、integer、float和string)。能夠定義resource常量,但應儘可能避免,由於會形成不可預料的結果。php

define部分
宏不只能夠用來代替常數值,還能夠用來代替表達式,甚至是代碼段。(宏的功能很強大,但也容易出錯,因此其利弊大小很有爭議。)
宏的語法爲:html

#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快不少。htm

一、const用於類成員變量的定義,一經定義,不可修改。Define不能夠用於類成員變量的定義,可用於全局常量。內存

二、Const可在類中使用,define不能get

三、Const不能再條件語句中定義常量,代碼以下顯示:編譯器

<?php
if (...){
const FOO = 'BAR';    // 無效的invalid
}
if (...) {
define('FOO', 'BAR'); // 有效的valid
}
?>

四、const採用普通的常量名稱,define能夠採用表達式做爲名稱,代碼以下顯示:string

<?php
const  FOO = 'BAR';
for ($i = 0; $i < 32; ++$i) {
define('BIT_' . $i, 1 << $i);
}
?>

五、const只能接受靜態的標量,而define能夠採用任何表達式,代碼以下顯示:

<?php
const BIT_5 = 1 << 5;    // 無效的invalid
define('BIT_5', 1 << 5); // 有效的valid
?>

六、const定義的常量時大小寫敏感,而define能夠經過第三個參數(爲true表示大小寫不敏感)來指定大小寫是否敏感,代碼以下顯示:

<?php
define('FOO', 'BAR', true);
echo FOO; // BAR
echo foo; // BAR
?>

【相關文章推薦】:

1. php中define和defined函數的區別和用法實例

相關文章
相關標籤/搜索