首頁 後端開發 php教程 詳解PHP中const和define的區別

詳解PHP中const和define的區別

Dec 18, 2019 pm 04:13 PM
const define

詳解PHP中const和define的區別

#在PHP定義常數時,可用const與define這兩種方式,那他們到底有什麼差別呢?  

1. const用於類別成員變數定義,一旦定義且無法改變其值。 define定義全域常數,在任何地方都可以存取。  

2. define不能定義在類別中,而const必須定義在類別中,且const定義的變數必須透過類別名稱::變數名稱來存取。  

3. const不能在條件語句中定義常數。  

4. const採用一個普通的常數名稱(靜態的標量),define可以採用任何表達式作為名稱。  

5. const 總是大小寫敏感,然而define()可以透過第三個參數來定義大小寫不敏感的常數。  

6.使用const簡單易讀,它本身就是語言結構,而define是方法,用const定義在編譯時比define快很多。

如果在類別中定義常數,不能用define,而用const,如下例:

推薦:《PHP教學》 

<?php
//在类外面通常这样定义常量
define("PHP","111cn.net");
class MyClass
{
    //常量的值将始终保持不变。在定义和使用常量的时候不需要使用$符号
    const constant = &#39;constant value&#39;;

    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的:

<?php
   const a = "abcdef";
   echo a;
?>
登入後複製

關於常數的基礎知識,這裡不說了,除了以上,define和const的其它區別(摘自網路):

1.const不能再條件語句中定義常數,但是define是可以的,如下:

<?php
if(1){
   const a = &#39;java&#39;;
 }    
echo a;  //必错
?>
登入後複製

2.const採用一個普通的常數名稱,define可以採用表達式作為名稱

<?phpconst  FOO = &#39;PHP&#39;; 
for ($i = 0; $i < 32; ++$i) { 
    define(&#39;PHP_&#39; . $i, 1 << $i); 
} 
?>
登入後複製

3.const只能接受靜態的標量,而define可以採用任何表達式。

<?php
const PHP = 1 << 5; // 错误
define(&#39;PHP&#39;, 1 << 5); // 正确 
?>
登入後複製

4.const本身就是一個語言結構。而define是一個函數。所以使用const速度要快的多。

兩者共同點:兩者都是不能進行重新賦值。

以下內容摘自Rotted_Pencil的部落格文章:PHP定義常數的差異,define() vs. const

前言  

#今天在Stackoverflow又看到一篇很有趣的文章,所以翻譯過後摘了過來。文章是由PHP開發成員之一的NikiC寫的,權威性自然毋庸置疑

正文  

在PHP5.3中,有兩種​​方法可以定義常數:

1.使用const關鍵字  

2.使用define()方法

const FOO = ‘BAR’; 
define(‘FOO’,’BAR’);
登入後複製

這兩種方式的根本差異在於const會在程式碼編譯時定義一個常數,而define則是在程式碼運行時才定義一個常數。這使得const會有以下幾個缺點:

const不能在條件語句中使用。如果要定義一個全域變量,const必須要處於整個程式碼的最外層:

if (...) {    
    const FOO = &#39;BAR&#39;;    // 无效的
}
// but
if (...) {
   define(&#39;FOO&#39;, &#39;BAR&#39;); // 有效的
}
登入後複製

你可以能會問為什麼我要這麼做?一個最平常的例子是當你在偵測一個常數是否已經被定義時:

if (!defined(&#39;FOO&#39;)) {
    define(&#39;FOO&#39;, &#39;BAR&#39;);
}
登入後複製

const只能用來宣告變數(如數字、字串,或true, false, null, FILE),而define()還能接受表達式。不過在PHP5.6之後const也可以接受常數的表達式了:

const BIT_5 = 1 << 5;    // 在PHP5.6之后有效,之前无效
define(&#39;BIT_5&#39;, 1 << 5); // 一直有效
登入後複製

const的常數命名只能用直白的文本,而define()允許你用任何表達式來對常量命名。這樣我們就可以執行以下操作:

for ($i = 0; $i < 32; ++$i) {
    define(&#39;BIT_&#39; . $i, 1 << $i);
}
登入後複製

const定義的常數是大小寫敏感的,但是define允許你將其第三個參數設為true來關閉其對大小寫的敏感:

define(&#39;FOO&#39;, &#39;BAR&#39;, true);
echo FOO; // BAR
echo foo; // BAR
登入後複製

以上就是你需要注意的幾點。那麼現在我來說明以下,為什麼不涉及以上情況下,我個人總是習慣使用const:

const更加易讀、美觀。

const預設在目前的namespace下定義常數,而使用define則需要你寫明整個namespace的完整路徑: 

namespace A\B\C; 
// 如果要定义常量 A\B\C\FOO: 
const FOO = ‘BAR’; 
define(‘A\B\C\FOO’, ‘BAR’);
登入後複製

自從PHP5.6後,使用const陣列也能被定義為常量。而define目前是不支援這項功能的,但是該功能會在PHP7中被實現:

const FOO = [1, 2, 3];    // 在PHP 5.6中有效 
define(‘FOO’, [1, 2, 3]); // 在PHP 5.6无效, 在PHP 7.0有效
登入後複製

因為const在編譯時就被執行了,所以它在速度上要比define快一點。 

尤其是使用define定義大量常數時,PHP的運行速度會變得非常慢。人們甚至發明了諸如apc_load_constantshide來避免這個問題

與define相比,const能讓定義常數的效率提高一倍(在配置有XDebug的開發機器上,這個差異還會更大)。但是在查詢時間上,兩者是沒有區別的(因為二者用的都是同一個查詢表)

最後需要注意的一點是,const可以在class和interface當中使用,而define是做不到這一點的:

class Foo {
    const BAR = 2; // 有效
}
class Baz {
    define(&#39;QUX&#39;, 2); // 无效
}
登入後複製

總結  

#####

除非你需要使用表達式或在條件語句中定義常數,不然的話只是為了程式碼的簡單可讀性你都最好要使用const!

更多PHP相關知識,請造訪PHP中文網

以上是詳解PHP中const和define的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

define怎麼定義多行宏 define怎麼定義多行宏 Oct 11, 2023 pm 01:24 PM

define定義多行巨集可以透過使用 `\` 將 `do { \ printf("%d\n", x); \ } while (0)` 分成了多行來定義。在巨集定義中,反斜線 `\` 必須是巨集定義的最後一個字符,且不能有空格或註解跟隨。使用 `\` 進行續行時,請注意保持程式碼的可讀性,並確保每個行末都有 `\`。

探究PHP中define函數的重要性與作用 探究PHP中define函數的重要性與作用 Mar 19, 2024 pm 12:12 PM

PHP中define函數的重要性與作用1.define函數的基本介紹在PHP中,define函數是用來定義常數的關鍵函數,常量在程式運行過程中不會改變其值。利用define函數定義的常數,在整個腳本中均可被訪問,具有全域性。 2.define函數的語法define函數的基本語法如下:define(&quot;常數名稱&quot;,&quot;常數值&amp;qu

深入理解C語言中的const 深入理解C語言中的const Feb 18, 2024 pm 12:56 PM

C中const的詳解及程式碼範例在C語言中,const關鍵字用來定義常數,表示該變數的值在程式執行過程中不能被修改。 const關鍵字可以用來修飾變數、函數參數、函數傳回值。本文將對C語言中const關鍵字的使用進行詳細解析,並提供具體的程式碼範例。 const修飾變數當const用來修飾變數時,表示變數為唯讀變量,一旦賦值就無法再修改。例如:constint

define怎麼定義條件編譯 define怎麼定義條件編譯 Oct 11, 2023 pm 01:20 PM

define定義條件編譯可以使用 `#ifdef`、`#ifndef`、`#if`、`#elif`、`#else` 和 `#endif` 預處理指令來實作。

一起聊聊var、let以及const的差異(程式碼範例) 一起聊聊var、let以及const的差異(程式碼範例) Jan 06, 2023 pm 04:25 PM

這篇文章為大家帶來了關於JavaScript的相關知識,其中主要為大家介紹了var、let以及const的區別有哪些,還有ECMAScript 和JavaScript的關係介紹,有興趣的朋友一起來看一下吧,希望對大家有幫助。

c語言const怎麼用 c語言const怎麼用 Sep 20, 2023 pm 01:34 PM

const是關鍵字,可以用來宣告常數、函數參數中的const修飾符、const修飾函數傳回值、const修飾指標。詳細介紹:1、聲明常數,const關鍵字可用於聲明常數,常數的值在程式運作期間不可修改,常數可以是基本資料類型,如整數、浮點數、字元等,也可是自訂的資料型別; 2.函數參數中的const修飾符,const關鍵字可用於函數的參數中,表示該參數在函數內部不可修改等等。

在 Windows 11 上修復音訊服務無回應問題的 18 種方法 在 Windows 11 上修復音訊服務無回應問題的 18 種方法 Jun 05, 2023 pm 10:23 PM

音訊輸出和輸入需要特定的驅動程式和服務才能在Windows11上按預期工作。這些有時最終會在後台遇到錯誤,從而導致音訊問題,如無音訊輸出、缺少音訊設備、音訊失真等。如何修復在Windows11上沒有回應的音訊服務我們建議您從下面提到的修復開始,並逐步完成列表,直到您設法解決您的問題。由於Windows11上的多種原因,音訊服務可能無法回應。此清單將幫助您驗證和修復阻止音訊服務在Windows11上回應的大多數問題。請按照以下相關部分幫助您完成流程。方法一:重啟音訊服務您可能會遇

C++ 函式const關鍵字的正確用法有哪些? C++ 函式const關鍵字的正確用法有哪些? Apr 11, 2024 pm 02:36 PM

C++中const關鍵字的正確用法:使用const修飾函數,表示函數不會修改傳入的參數或類別成員。使用const宣告函數指針,表示該指針指向常數函數。

See all articles