const没define好用 php,3分钟短文|PHP 定义常量,我该用define还是const?这下不迷茫了...
引言
我們今天說一下 PHP 編程中,定義一個常量所使用的兩種方法。有哪些區(qū)別,以及哪種是最佳實踐?
問題
有開發(fā)者說,我在學(xué)習(xí)編寫 PHP,可是定義常量的方法很是讓人迷惑。比如有下面這樣的寫法:
define('FOO', 1);const FOO = 1;
而且在框架中,也大量地摻雜著兩種定義方法的混用。到底哪一個好?
深層原因
對于 PHP5.3 及以上,定義一個常量有兩種方法,一個是用 const 關(guān)鍵字,一個是使用 define 函數(shù)。比如這樣寫:
const FOO = 'BAR';define('FOO', 'BAR');
這兩種方式之間的根本區(qū)別是const在編譯時定義常量,而define在運行時定義常量。這導(dǎo)致了大多數(shù)const的缺點。下面列舉一些:
1 - const不能用于有條件地定義常量。要定義全局常量,必須在最外層范圍中使用它:
if (...) { const FOO = 'BAR'; // 無效}// 但是if (...) { define('FOO', 'BAR'); // 有效}
一種常見的應(yīng)用是檢查常量是否已經(jīng)定義:
if (!defined('FOO')) {define('FOO', 'BAR');}
2 - const只能接受一個靜態(tài)標量(數(shù)字,字符串或其它常量值true,false,null,__FILE__),而define()可使用任何表達式。
const BIT_5 = 1 << 5; // VPHP 5.6 以下版本均無效define('BIT_5', 1 << 5); // 有效
3 - const只能采用簡單的常量名稱,而define()接受任何表達式作為名稱。這樣可以執(zhí)行以下操作:
for ($i = 0; $i < 32; ++$i) { define('BIT_' . $i, 1 << $i);}
4 - consts始終區(qū)分大小寫,而define()允許您通過將其true作為第三個參數(shù)傳遞來定義不區(qū)分大小寫的常量。
define('FOO', 'BAR', true);echo FOO; // BARecho foo; // BAR
const 的優(yōu)點
除了上一節(jié)所說的 const 的缺點外,我一般都會堅持使用 const。因為它實在太好用,太可愛了。
1 - const使代碼更好讀。
它是一種語言構(gòu)造,而不是函數(shù),并且與您在類中定義常量的方式保持一致。
2 - const作為一種語言構(gòu)造,可以通過自動化工具進行靜態(tài)分析。
3 - const在當前名稱空間中定義一個常量,同時define()必須傳遞完整的名稱空間名稱:
namespace A\B\C;// 定義常量 A\B\C\FOO:const FOO = 'BAR';define('A\B\C\FOO', 'BAR');
4 - 由于PHP 5.6const常量也可以是數(shù)組,而define()尚不支持數(shù)組。但是,PHP 7中的兩種情況都支持數(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 定義常量,可讀性不強。
加上框架中強制的 OOP 方式,使得我們自覺不自覺地形成 const 定義類常量的習(xí)慣。而且對于 IDE 的自動索引也極為友好,寫代碼順溜的不得了。
Happy coding :_)
我是 @程序員小助手 ,持續(xù)分享編程知識,歡迎關(guān)注。
總結(jié)
以上是生活随笔為你收集整理的const没define好用 php,3分钟短文|PHP 定义常量,我该用define还是const?这下不迷茫了...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wince linux 性能,wince
- 下一篇: Linux 管理登陆的用户/查看/剔除