大家都知道define是定義常量的,如果在類中定義常量呢?當然不能用define,而用const,如下例:
| 代碼如下 |
複製代碼 |
<?php define('PHP', 'I love PHP'); // 在類外面通常這樣定義常量 if (defined('PHP')) { echo 'PHP is defined!'; } class MyClass { // 常量的值將始終保持不變。在定義和使用常量的時候不需要使用$符號 const CONSTANT = 'constant value'; function showConstant() { echo self::CONSTANT . '<br/>'; } } echo MyClass::CONSTANT . '<br/>'; $classname = 'MyClass'; echo $classname::CONSTANT . '<br/>'; // PHP 5.3.0 之後 $class = new MyClass(); $class->showConstant(); echo $class::CONSTANT.'<br/>'; // PHP 5.3.0 之後 print_r(get_defined_constants()); // 可以用get_defined_constants()擷取所有定義的常量
|
一般是define在類外定義常量,const在類內定義常量,並且const必須通過類名::變數名來進行訪問。但是php5.3以上支援類外通過const定義常量,看如下,這樣是ok的:
| 代碼如下 |
複製代碼 |
const PHP_N = 'use const defined PHP'; echo PHP_N; if (defined('PHP_N')) { echo 'PHP_N is defined!'; }
|
常量一般採用大寫單詞與底線間隔的方式命名,常量必須通過 const 定義為類的成員,強烈不鼓勵使用 define定義的全域常量。
關於常量的基礎知識,這裡不說了,除了以上,define和const的其它區別
1.const不能再條件陳述式中定義常量,但是define是可以的,如下:
| 代碼如下 |
複製代碼 |
<?php if (1) { const A = 'php'; } echo A; // 必錯
|
2.const採用一個普通的常量名稱,define可以採用運算式作為名稱
| 代碼如下 |
複製代碼 |
<?php const FOO = 'PHP'; for ($i = 0; $i < 32; ++$i) { define('PHP_' . $i, 1 << $i); } |
3.const只能接受靜態標量,而define可以採用任何錶達式。
| 代碼如下 |
複製代碼 |
<?php const PHP = 1 << 5; // 錯誤 define('JAVA', 1 << 5); // 正確 4.const本身就是一個語言結構。而define是一個函數。所以使用const速度要快的多。
|
常量的命名規範:
常量包含數字字母字元和底線,數字允許作為常量名
採用大寫單詞與底線間隔的方式,例如可以這樣 EMBED_SUPPRESS_EMBED_EXCEPTION 但不許這樣 EMBED_SUPPRESSEMBEDEXCEPTION
通常使用常量所在的包名或者是類名作為首碼。比如,對於Bug類中常量應該以BUG_開始
常量必須通過 “const” 定義為類的成員,強烈不鼓勵使用 “define” 定義的全域常量