PHP中const和define()定義常量的細節區別

在PHP 5.3.0之後,除了使用函數define()之外,我們還可以使用PHP關鍵字const來定義常量,例如:

  1. <?php
  2. define('PI', 3.14159);  //定義一個名爲PI的常量
  3. echo PI;    //輸出:3.14159
  4. //以下代碼需在PHP 5.3.0及之後的版本中運行
  5. const PI = 3.14159; //使用const關鍵字定義一個名爲PI的常量
  6. echo PI;    //輸出:3.14159
  7. ?>

不過它們之間有什麼不同的。

PHP中define()函數和const關鍵字定義常量的區別:

1.版本差異

函數define()在PHP4和PHP5中均可使用,關鍵字const只能在PHP 5.3.0及其後的版本中使用。

2.定義位置的區別

  • 由於函數define()是在執行define()函數時定義的,因此可以在函數內、循環內、if語句內等函數能夠被調用的任何地方使用define()函數定義常量。
  • const關鍵是在編譯時定義常量,因此const關鍵字定義常量必須處於最頂端的作用區域。這也就意味着不能在函數內、循環內以及if語句之內用const來定義常量。

  1. <?php
  2. //使用const關鍵字定義常量必須處於最頂端的作用區域
  3. //也就是可以在編譯時直接解析定義的地方
  4. const DEMO = 'DEMO';
  5. class Person{
  6.     const MAN = '男';
  7.     const WOMAN = '女';
  8. }
  9. interface USB{
  10.     const VERSION_2 = '2.0';
  11.     const VERSION_3 = '3.0';
  12. }
  13. ?>

3.對值的表達式支持的差異

雖然關鍵字constdefine()定義的常量值都只能爲null或標量數據(booleanintegerfloatstring類型)以及resource類型(不

薦定義resource類型的常量,否則可能出現無法預知的結果)。

不過,由於關鍵字const定義常量是在編譯時定義的,因此const關鍵字定義的常量值的表達式中不支持算術運算符、位運算符、比較運算符等多種運算符

而這些運算符在define()函數定義常量時都是可以直接使用的。

  1. <?php
  2. define('DEFINE_VAR1', 1 << 1);
  3. //const CONST_VAR1 = (1 << 1); //const不支持位運算符,PHP會報語法錯誤
  4. define('DEFINE_VAR2', 1 + 1);
  5. //const CONST_VAR2 = 1 + 1 ; //const不支持算術運算符,PHP會報語法錯誤
  6. define('DEFINE_VAR3', 1 == 1);
  7. //const CONST_VAR3 = 1 == 1 ; //const不支持比較運算符,PHP會報語法錯誤
  8. $value = 3;
  9. define('DEFINE_VAR4', $value);
  10. //const CONST_VAR4 = $value ; //const不支持變量形式的值,PHP會報語法錯誤
  11. define('DEFINE_VAR5', true || false);
  12. //const CONST_VAR5 = true || false ; //const不支持邏輯運算符,PHP會報語法錯誤
  13. define('DEFINE_VAR6', 'Hello'.' World!');
  14. //const CONST_VAR6 = 'Hello'.' World!' ; //const不支持字符串運算符,PHP會報語法錯誤
  15. class User{
  16. }$user = new User();define('DEFINE_VAR7', $user instanceof User);
  17. //const CONST_VAR7 = $user instanceof User ; //const不支持類型運算符,PHP會報語法錯誤
  18. ?>

4.對字符大小寫敏感的支持差異

函數define()可以接收第3個參數,如果該參數爲true,則表示常量名的大小寫不敏感。

而使用const關鍵字定義常量卻沒有提供類似的功能。

  1. <?php
  2. //設置編碼爲UTF-8,以避免中文亂碼
  3. header('Content-Type:text/html;charset=utf-8');
  4. //define()的第3個參數爲true時,表示大小寫不敏感
  5. define('SITE_NAME', 'CodePlayer', true);
  6. echo SITE_NAME; //輸出:CodePlayer
  7. echo site_name; //輸出:CodePlayer
  8. echo SiTe_NamE; //輸出:CodePlayer
  9. const DOMAIN_NAME = '365mini.com';
  10. echo DOMAIN_NAME;   //輸出:365mini.com
  11. echo domain_name;   //PHP提示常量未定義
  12. echo DomaIN_nAMe;   //PHP提示常量未定義
  13. ?>


發佈了32 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章