php中使用define()和const定義常量的一些區別

來源:互聯網
上載者:User
眾所周知,在PHP中(php 4及以後),我們可以使用函數define()來定義常量,例如:

<?phpdefine('PI', 3.14159);  //定義一個名為PI的常量echo PI;    //輸出:3.14159?>

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

例如:

<?php//以下代碼需在PHP 5.3.0及之後的版本中運行const PI = 3.14159; //使用const關鍵字定義一個名為PI的常量echo PI;    //輸出:3.14159?>

雖然上述兩種方式均可以定義常量,但是它們之間有什麼不同之處呢。下面我們來一一講解PHP中define()函數和const關鍵字定義常量的區別:

1.版本差異
首先,毫無疑問的是,兩種定義常量的方式之間存在版本差異,函數define()在PHP4和PHP5中均可使用,關鍵字const只能在PHP 5.3.0及其後的版本中使用。

2.定義位置的區別
由於函數define()定義的常量是在執行define()函數時定義的,因此可以在函數內、迴圈內、if語句內等函數能夠被調用的任何地方使用define()函數定義常量。與define()不同的是,由於const關鍵字定義的常量是在編譯時間定義的,因此const關鍵字定義常量必須處於最頂端的作用地區。這也就意味著不能在函數內、迴圈內以及if語句之內用const來定義常量。

<?php//使用const關鍵字定義常量必須處於最頂端的作用地區//也就是可以在編譯時間直接解析定義的地方const DEMO = 'DEMO';class Person{    const MAN = '男';    const WOMAN = '女';}interface USB{    const VERSION_2 = '2.0';    const VERSION_3 = '3.0';}?>

3.對值的運算式支援的差異
雖然關鍵字const和define()定義的常量值都只能為null或標量資料(boolean,integer,float和string類型)以及resource類型(不推薦定義resource類型的常量,否則可能出現無法預知的結果)。不過,由於關鍵字const定義常量是在編譯時間定義的,因此const關鍵字定義的常量值的運算式中不支援算術運算子、位元運算符、比較子等多種運算子,而這些運算子在define()函數定義常量時都是可以直接使用的。

<?phpdefine('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會報語法錯誤?>

4.對字元大小寫敏感的支援差異
除上述3個區別外,還有一個不太起眼的區別。函數define()可以接收第3個參數,如果該參數為true,則表示常量名的大小寫不敏感。而使用const關鍵字定義常量卻沒有提供類似的功能。

<?php//設定編碼為UTF-8,以避免中文亂碼header('Content-Type:text/html;charset=utf-8');//define()的第3個參數為true時,表示大小寫不敏感define('SITE_NAME', 'CodePlayer', true);echo SITE_NAME; //輸出:CodePlayerecho site_name; //輸出:CodePlayerecho SiTe_NamE; //輸出:CodePlayerconst DOMAIN_NAME = '365mini.com';echo DOMAIN_NAME;   //輸出:365mini.comecho domain_name;   //PHP提示常量未定義echo DomaIN_nAMe;   //PHP提示常量未定義?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.