首頁  >  文章  >  後端開發  >  php中define和const有什麼差別? (詳解)

php中define和const有什麼差別? (詳解)

不言
不言轉載
2019-01-07 11:13:383917瀏覽

這篇文章帶給大家的內容是關於php中define和const有什麼差別? (詳解),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

php定義常數的方式有兩種define和const,兩者有什麼差別?

const CONSTANCE = 'const';
define('CONSTANCE',  'const');

const關鍵字從php 5.3以後可以在類別定義之外定義常數

const可以在類別內部定義,而define不行。
const定義的常數在目前的命名空間中,而define要定義執行的命名空間,必須寫出具體命名空間。

class Foo {
    const BAR = 2;
}


class Foo2 {
    define("BAR", 3); //无效的
}

//命名空间的示例
namespace A{
    const A1 = 1; //处在命名空间A中
    define('A2',  2); //全局可调用
    define('A\A3', 3); //处在命名空间A中
}

namespace B{
    use const \A\A1;
    use const \A\A3;
    
    echo A1;
    echo A2; //全局调用
    echo A3;
}

const是在編譯階段定義常數,define是在預處理階段定義常數

const在編譯階段就定義了常數,定義常數時必須處於最頂端的作用區域。
所以不能再if等條件語句中定義。

define定義常數,又叫巨集定義,巨集可以描述為根據一系列預先定義的規則取代一定的文字模式。
define可以在分支中存在。

理論上,使用const處理速度比define會快一點點。

const只接受標量數據,(如integer, string, boolean和float等);define可以接受任意表達式

define('BIT_5',   1<<5); 
const BIT_5 =     1<<5; //5.6之后才有效
從php 5.6起,const也可以接受陣列和表達式
define可以接受resource類型,const不行

const常數名只能是簡單字符,define可以是任意表達式

const STR = 'string';
$i = 1;
define("STR_" . $i,  STR);

const大小寫敏感,define可以透過第三個傳參控制大小寫敏感。

另外幾個問題

const和define定義的常數數組是否能改變其中的元素?

能否用defined來檢查const定義的常數?

###### ###

以上是php中define和const有什麼差別? (詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除