深入分析php中const和define定義常量的區別

來源:互聯網
上載者:User

大家都知道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” 定義的全域常量

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.