[PHP]常量定義: const和define區別和運用; 附constant解釋

前言

常量是一個簡單值的標識符(名字)。如同其名稱所暗示的,在腳本執行期間該值不能改變(除了所謂的魔術常量,它們其實不是常量)。常量默認爲大小寫敏感。一般常量標識符老是大寫的。php

在 PHP 5.3.0 以前能夠用 define() 函數來定義常量
在 PHP 5.3.0 之後,可使用 const 關鍵字在類定義的外部定義常量,先前版本const 關鍵字只能在類(class)中使用
一個常量一旦被定義,就不能再改變或者取消定義
常量只能包含標量數據(boolean,integer,float 和 string),不能是表達式。
能夠定義 resource 常量,但應儘可能避免,由於會形成不可預料的結果。函數

能夠簡單的經過指定其名字來取得常量的值,與變量不一樣,不該該在常量前面加上 $ 符號。
若是常量名是動態的,也能夠用函數constant() 來獲取常量的值。
用get_defined_constants() 能夠得到全部已定義的常量列表。
常量和變量有以下不一樣:
常量前面沒有美圓符號($);
常量能夠不用理會變量的做用域而在任何地方定義和訪問;
常量一旦定義就不能被從新定義或者取消定義;
常量的值只能是標量。code

const實驗

<?php

const CONST_A = 'A';
const CONST_B = 'B';

echo CONST_A;
echo "\n--------\n";
echo CONST_B;
?>

輸出結果

A
----
B作用域


<?php

const CONST_A = 'A';
if(true){ //這裏無論是什麼條件 const其實都不能夠在條件裏出現,沒法經過編譯解釋
    const CONST_B = 'B';
}
const CONST_FOUR = 1+2; //沒法經過編譯解釋,const必須是標量不能是表達式

echo CONST_A;
echo "\n--------\n";
echo CONST_B;
?>

輸出結果

Parse error: syntax error, unexpected 'const' (T_CONST) in /usercode/file.php on line 5get

<?php

class fooClass {
    const bar = 'pro';
    public function print(){
        echo self::bar;
    } 
}

echo fooClass::bar;

$classname = "fooClass";
echo $classname::bar. "\n"; // 自 5.3.0 起

$foo = new fooClass();
echo "\n----\n";
echo $foo->print();
echo "\n----\n";
echo $foo::bar;  // 自 5.3.0 起
?>

輸出結果

pro
----
pro
----
prostring

define實驗

<?php

define('CONST_A','A');
define('CONST_B','B');
define('CONST_FOUR', 1+3);

echo CONST_A;
echo "\n--------\n";
echo CONST_B;
echo "\n--------\n";
echo CONST_FOUR;
?>

輸出結果

A
----
B
----
4io


<?php

define('CONST_A','A');
if(true){
    define('CONST_B','B');
}
if(false){
    define('CONST_C','C');
}

echo CONST_A;
echo "\n--------\n";
echo CONST_B;
echo "\n--------\n";
echo CONST_C;
?>

輸出結果

A
--------
B
--------
CONST_C編譯

define不能夠出如今類定義之中function

附加constant函數

以前一直不理解constant有什麼做用,先看下官方的介紹
經過 name 返回常量的值。當你不知道常量名,卻須要獲取常量的值時,constant() 就頗有用了。也就是常量名儲存在一個變量裏,或者由函數返回常量名。該函數也適用
下面用一個簡單的代碼來實驗class

<?php

define("MAXSIZE", 100);

echo MAXSIZE; //output: 100
echo constant("MAXSIZE"); //output: 100


interface bar {
    const test = 'foobar!';
}

class foo {
    const test = 'foobar!';
}

$const = 'test';

var_dump(constant('bar::'. $const)); //output: "foobar!"
var_dump(constant('foo::'. $const)); //output: "foobar!"
?>

總結

define可用在條件判斷中,不成立的條件中,定義的不生效,成功定義後全局可用,但是表達式賦值const不可用在條件判斷中,不過可定義在類中,不可表達式賦值,必須是標量

相關文章
相關標籤/搜索