php中const與define的使用區別 詳解

php中const與define的使用區別 詳解




wKioL1RIdquxb0SsAAD9J2qOU5o541.jpg


1、const用於類成員變量定義,一旦定義且不能改變其值。define定義全局常量,在任何地方都可以訪問。

2、define不能在類中定義而const可以。
 
3、const不能在條件語句中定義常量

if (...) { 
    const FOO = 'BAR';    // invalid 

 
but 
 
if (...) { 
    define('FOO', 'BAR'); // valid 

4、const採用一個普通的常量名稱,define可以採用表達式作爲名稱。


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

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

const BIT_5 = 1 << 5;    // invalid 
 
but 
 
define('BIT_5', 1 << 5); // valid 

6、const 總是大小寫敏感,然而define()可以通過第三個參數來定義大小寫不敏感的常量

define('FOO', 'BAR', true);  www.2cto.com
echo FOO; // BAR 
echo foo; // BAR 
總結:
使用const簡單易讀,它本身是一個語言結構,而define是一個方法,用const定義在編譯時比define快很多。






PHP常量有自身的特點,在實際中能少用就少用。

1、PHP常量是定義後就不能修改和再次賦值。但是如果再次賦值會怎麼樣?

<?php
define('a', 12345);
define('a', 12349999999);

?>

這段代碼只會報個notice錯誤。

帶來的後果是:在你定義之前,其它人要是定義了同名的常量,你可能真的不知道里面究竟是什麼值。

補救方法:

使用定義常量之前要使用definde()來確認一下常量是否已經定義過。

實際上,這是PHP處理錯誤過於寬泛,如果程序報Fatal並停止程序執行就可以避免這個問題。

 

2、如果判斷PHP常量是否被定義?

<?php

define('a', 12345);

// 錯誤方法1,經常犯

if (isset(a)){……}

 

// 錯誤方法2,經常犯

if (defined(a)){……}

 

// 正確方法,不知道幾個人能寫對

if (defined('a')){……}

 

?>

 

3、使用不方便,容易混淆,效率低

<?php

// 再未定義前,直接作爲字母使用

echo "這是常量a".a;// 顯示:這是常量aa

 

define('a', 12345);

// 不能放在""內來使用,只能放在""外

echo "這是常量a".a;// 顯示:這是常量a12345

 

?>

因爲php處理常量的時候要進行多次查找,所以效率低。

 

4、一個經典的錯誤,數組中key爲常量的問題

<?php

$t = array('a'=>'a','b'=>'b','c'=>'c');

 

// 得到key爲a的值

echo $t['a'];

 

// 錯誤!雖然,也可以得到key爲a的值,是因爲php找不到常量a所以將a做爲字符串返回,導致大家將錯就錯的使用。

echo $t[a]; 

 

define('a', 'c');

// 正確,注意:得到key爲c的值

echo $t[a];

 

?>

 

PHP常量的問題,在於PHP處理常量的方法過於寬鬆導致的,如果能夠嚴格一些,就會避免很多的問題。在實際過程,能用變量就不要用常量,因爲變量的效率高使用更加方便。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章