define可以定義函式嗎 PHP常量的定義和使用

2021-10-13 16:59:22 字數 2844 閱讀 8261

一 常量的定義

php中(php 4及以後),我們可以使用函式define()來定義常量,例如:

<?php 

define('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關鍵字定義常量的區別

一 版本差異

首先,毫無疑問的是,兩種定義常量的方式之間存在版本差異,函式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會報語法錯誤

?>

四 對字元大小寫敏感的支援差異除上述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; //輸出:codeplayer

echo site_name; //輸出:codeplayer

echo site_name; //輸出:codeplayer

const domain_name = '365mini.com';

echo domain_name; //輸出:365mini.com

echo domain_name; //php提示常量未定義

echo domain_name; //php提示常量未定義

?>

define可以定義函式嗎 PHP常量的定義和用法

我們通常把不經常變的值定義成常量,常量一般用全部大寫來表示,前面不加美元符號,也可減少團隊開發的出錯。那麼define和const有什麼區別呢?1 const是乙個語言結構 而define是乙個函式,可以通過第三個引數來指定是否區分大小寫。true表示大小寫不敏感,預設為false define p...

純虛函式可以定義了

今天看設計模式,其中突然間看到純虛函式竟然被定義了,和之前看到的明顯不對啊,之前記得是純虛函式是不可以定義的,具體的定義實現只能到子類中去實現,在父類中只能宣告。結果自己程式設計發現這是可以的,瞬間打破了自定曾經的知識結構,於是查詢相關方面的知識發現 純虛函式不是不可以定義,而是沒有作用,對於含有純...

區域性變數可以定義私有修飾型別嗎

問題闡述 專家解答 在 j a 語言中,可以使用 private protected 和 public 修飾類 成員變數和方法,但是不可以使用 private protected 和 public 修飾區域性變數。final 可以用來修飾區域性變數,但這樣修飾後它會變為常量。例如 package c...