日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

const没define好用 php,3分钟短文|PHP 定义常量,我该用define还是const?这下不迷茫了...

發(fā)布時(shí)間:2023/12/10 php 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 const没define好用 php,3分钟短文|PHP 定义常量,我该用define还是const?这下不迷茫了... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

引言

我們今天說一下 PHP 編程中,定義一個(gè)常量所使用的兩種方法。有哪些區(qū)別,以及哪種是最佳實(shí)踐?

問題

有開發(fā)者說,我在學(xué)習(xí)編寫 PHP,可是定義常量的方法很是讓人迷惑。比如有下面這樣的寫法:

define('FOO', 1);const FOO = 1;

而且在框架中,也大量地?fù)诫s著兩種定義方法的混用。到底哪一個(gè)好?

深層原因

對于 PHP5.3 及以上,定義一個(gè)常量有兩種方法,一個(gè)是用 const 關(guān)鍵字,一個(gè)是使用 define 函數(shù)。比如這樣寫:

const FOO = 'BAR';define('FOO', 'BAR');

這兩種方式之間的根本區(qū)別是const在編譯時(shí)定義常量,而define在運(yùn)行時(shí)定義常量。這導(dǎo)致了大多數(shù)const的缺點(diǎn)。下面列舉一些:

1 - const不能用于有條件地定義常量。要定義全局常量,必須在最外層范圍中使用它:

if (...) { const FOO = 'BAR'; // 無效}// 但是if (...) { define('FOO', 'BAR'); // 有效}

一種常見的應(yīng)用是檢查常量是否已經(jīng)定義:

if (!defined('FOO')) {define('FOO', 'BAR');}

2 - const只能接受一個(gè)靜態(tài)標(biāo)量(數(shù)字,字符串或其它常量值true,false,null,__FILE__),而define()可使用任何表達(dá)式。

const BIT_5 = 1 << 5; // VPHP 5.6 以下版本均無效define('BIT_5', 1 << 5); // 有效

3 - const只能采用簡單的常量名稱,而define()接受任何表達(dá)式作為名稱。這樣可以執(zhí)行以下操作:

for ($i = 0; $i < 32; ++$i) { define('BIT_' . $i, 1 << $i);}

4 - consts始終區(qū)分大小寫,而define()允許您通過將其true作為第三個(gè)參數(shù)傳遞來定義不區(qū)分大小寫的常量。

define('FOO', 'BAR', true);echo FOO; // BARecho foo; // BAR

const 的優(yōu)點(diǎn)

除了上一節(jié)所說的 const 的缺點(diǎn)外,我一般都會(huì)堅(jiān)持使用 const。因?yàn)樗鼘?shí)在太好用,太可愛了。

1 - const使代碼更好讀。

它是一種語言構(gòu)造,而不是函數(shù),并且與您在類中定義常量的方式保持一致。

2 - const作為一種語言構(gòu)造,可以通過自動(dòng)化工具進(jìn)行靜態(tài)分析。

3 - const在當(dāng)前名稱空間中定義一個(gè)常量,同時(shí)define()必須傳遞完整的名稱空間名稱:

namespace A\B\C;// 定義常量 A\B\C\FOO:const FOO = 'BAR';define('A\B\C\FOO', 'BAR');

4 - 由于PHP 5.6const常量也可以是數(shù)組,而define()尚不支持?jǐn)?shù)組。但是,PHP 7中的兩種情況都支持?jǐn)?shù)組。

const FOO = [1, 2, 3]; // PHP 5.6 及以上有效define('FOO', [1, 2, 3]); // PHP 7.0 及以上有效

5 - const還可以在類或接口內(nèi)使用它來定義類常量或接口常量。define沒這功能。

class Foo {const BAR = 2; // 完全支持}// 但是class Baz {define('QUX', 2); // 不能這么寫}

寫在最后

除非特別需要,我一般不使用 define 定義常量,可讀性不強(qiáng)。

加上框架中強(qiáng)制的 OOP 方式,使得我們自覺不自覺地形成 const 定義類常量的習(xí)慣。而且對于 IDE 的自動(dòng)索引也極為友好,寫代碼順溜的不得了。

Happy coding :_)

我是 @程序員小助手 ,持續(xù)分享編程知識(shí),歡迎關(guān)注。

總結(jié)

以上是生活随笔為你收集整理的const没define好用 php,3分钟短文|PHP 定义常量,我该用define还是const?这下不迷茫了...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。