一 什麼是常量
常量是乙個簡單值的識別符號,該值在指令碼中不能改變。
乙個常量由英文本母、下劃線、和數字組成,但數字不能作為首字母出現。 (常量名不需要加 $ 修飾符),常量在整個指令碼中都可以直接使用。
使用常量時,不能在常量名前新增$符號,不然會將常量轉換成新的未定義變數使用,會導致報錯
php中(php 4及以後)我們可以使用函式define()來定義常量
define ( string $name , mixed $value [, bool $case_insensitive = false ] )
注意:該函式有三個引數
name:必選引數,常量名稱,即標誌符
value:必選引數,常量的值
case_insensitive :可選引數,如果設定為 true,該常量則大小寫不敏感,預設是大小寫敏感的
下面我們來舉個栗子:
<?php
define('name',"php是世界上最好的語言"); //定義乙個名為pi的常量,區分大小寫
echo name; //輸出:php是世界上最好的語言
?>
如果**寫成 define('name',"php是世界上最好的語言",true)則表示不區分大小寫
php 5.3.0之後,除了使用函式define()之外,我們還可以使用php關鍵字const來定義常量
<?php //以下**需在php 5.3.0及之後的版本中執行
const pi = 3.14159; //使用const關鍵字定義乙個名為pi的常量
echo pi; //輸出:3.14159
?>
define()是函式const是語言結構所以在執行時const要快得多
雖然上述兩種方式均可以定義常量,但是它們之間有什麼不同之處呢。下面我們來一一講解php中define()函式和const關鍵字定義常量的區別
一 版本差異
兩種定義常量的方式之間存在版本差異,函式define()在php4和php5中均可使用,關鍵字const只能在php 5.3.0及其後的版本中使用。
二 定義位置的區別
由於函式define()定義的常量是在執行define()函式時定義的,因此可以在函式內、迴圈內、if語句內等函式能夠被呼叫的任何地方使用define()函式定義常量
與define()不同的是,由於const關鍵字定義的常量是在編譯時定義的,因此const關鍵字定義常量必須處於最頂端的作用區域。這也就意味著不能在函式內、迴圈內以及if語句之內用const來定義常量。
<?php
//使用const關鍵字定義常量必須處於最頂端的作用區域
//也就是可以在編譯時直接解析定義的地方
const demo = 'demo';
class person
inte***ce usb
?>
三 對值的表示式支援的差異雖然關鍵字const和define()定義的常量值都只能為null或標量資料(boolean,integer,float和string型別)以及resource型別(不推薦定義resource型別的常量,否則可能出現無法預知的結果)。不過,由於關鍵字const定義常量是在編譯時定義的,因此const關鍵字定義的常量值的表示式中不支援算術運算子、位運算子、比較運算子等多種運算子,而這些運算子在define()函式定義常量時都是可以直接使用的
<?php
define('define_var1', 1 << 1);
//const const_var1 = (1 << 1); //const不支援位運算子,php會報語法錯誤
define('define_var2', 1 + 1);
//const const_var2 = 1 + 1 ; //const不支援算術運算子,php會報語法錯誤
define('define_var3', 1 == 1);
//const const_var3 = 1 == 1 ; //const不支援比較運算子,php會報語法錯誤
$value = 3;
define('define_var4', $value);
//const const_var4 = $value ; //const不支援變數形式的值,php會報語法錯誤
define('define_var5', true || false);
//const const_var5 = true || false ; //const不支援邏輯運算子,php會報語法錯誤
define('define_var6', 'hello'.' world!');
//const const_var6 = 'hello'.' world!' ; //const不支援字串運算子,php會報語法錯誤
class user{}
$user = new user();define('define_var7', $user instanceof user);
//const const_var7 = $user instanceof user ; //const不支援型別運算子,php會報語法錯誤
?>
四 對字元大小寫敏感的支援差異函式define()可以接收第3個引數,如果該引數為true,則表示常量名的大小寫不敏感。而使用const關鍵字定義常量卻沒有提供類似的功能,預設大小寫敏感
<?php
// 設定編碼為utf-8,以避免中文亂碼
header('content-type:text/html;charset=utf-8');
// define()的第3個引數為true時,表示大小寫不敏感
define('site_name', 'php是世界上最好的語言', true);
echo site_name; // 輸出:php是世界上最好的語言
echo site_name; // 輸出:php是世界上最好的語言
echo site_name; // 輸出:php是世界上最好的語言
const domain_name = 'php是世界上最好的語言';
echo domain_name; // 輸出:php是世界上最好的語言
echo domain_name; // php提示常量未定義
echo domain_name; // php提示常量未定義
?>
未定義的索引 php中 php的未定義索引如何解決
通常出現未定義的索引問題是由於陣列沒有這個值造成的,陣列分為關聯陣列和索引陣列,索引陣列是數字下標 關聯陣列是鍵值下標。解決辦法 判斷陣列中是否包含下標鍵值為id的值,如果沒有,則返回錯誤資訊,如何判斷呢,最簡單的方法就是用函式isset來判斷,如isset post id 存在則返回true,反之...
php中未定義的變數使用技巧
在檔案中直接使用 var dump a 該變數沒有定義過,那麼得到的結果是null。為空,不是任何資料型別 怎麼判斷它的值呢?加深自己的理解,下面使用是正常的 a 0 true a null true 不要嘗試這樣使用 if a 0 初學php的時候就從php聖經一書中了解到,變數沒有定義,就直接使...
js判斷變數是否未定義
一般如果變數通過var宣告,但是並未初始化的時候,變數的值為undefined,而未定義的變數則需要通過 typeof 變數 的形式來判斷,否則會發生錯誤。例如 if myvar01 alert 發生錯誤 該 直接發生異常,因為變數myvar01沒有申明 if undefined typeof my...