phpdefineconst
A. php define和const的區別
眾所周知,在PHP中(PHP 4及以後),我們可以使用函數define()來定義常量,例如:
<?php
define('PI', 3.14159); //定義一個名為PI的常量
echo PI; //輸出:3.14159
?>
不過,在PHP 5.3.0之後,除了使用函數define()之外,我們還可以使用PHP關鍵字const來定義常量。
例如:
<?php
//以下代碼需在PHP 5.3.0及之後的版本中運行
const PI = 3.14159; //使用const關鍵字定義一個名為PI的常量
echo PI; //輸出:3.14159
?>
雖然上述兩種方式均可以定義常量,但是它們之間有什麼不同之處呢。下面我們來一一講解PHP中define()函數和const關鍵字定義常量的區別:
1.版本差異
首先,毫無疑問的是,兩種定義常量的方式之間存在版本差異,函數define()在PHP4和PHP5中均可使用,關鍵字const只能在PHP 5.3.0及其後的版本中使用。
2.定義位置的區別
由於函數define()定義的常量是在執行define()函數時定義的,因此可以在函數內、循環內、if語句內等函數能夠被調用的任何地方使用define()函數定義常量。與define()不同的是,由於const關鍵字定義的常量是在編譯時定義的,因此const關鍵字定義常量必須處於最頂端的作用區域。這也就意味著不能在函數內、循環內以及if語句之內用const來定義常量。
<?php
//使用const關鍵字定義常量必須處於最頂端的作用區域
//也就是可以在編譯時直接解析定義的地方
const DEMO = 'DEMO';
class Person{
const MAN = '男';
const WOMAN = '女';
}
interface USB{
const VERSION_2 = '2.0';
const VERSION_3 = '3.0';
}
?>
3.對值的表達式支持的差異
雖然關鍵字const和define()定義的常量值都只能為null或標量數據(boolean,integer,float和string類型)以及resource類型(不推薦定義resource類型的常量,否則可能出現無法預知的結果)。不過,由於關鍵字const定義常量是在編譯時定義的,因此const關鍵字定義的常量值的表達式中不支持算術運算符、位運算符、比較運算符等多種運算符,而這些運算符在define()函數定義常量時都是可以直接使用的。
<?php
define('DEFINE_VAR1', 1 << 1);
//const CONST_VAR1 = (1 << 1); //const不支持位運算符,PHP會報語法錯誤
define('DEFINE_VAR2', 1 + 1);
//const CONST_VAR2 = 1 + 1 ; //const不支持算術運算符,PHP會報語法錯誤
define('DEFINE_VAR3', 1 == 1);
//const CONST_VAR3 = 1 == 1 ; //const不支持比較運算符,PHP會報語法錯誤
$value = 3;
define('DEFINE_VAR4', $value);
//const CONST_VAR4 = $value ; //const不支持變數形式的值,PHP會報語法錯誤
define('DEFINE_VAR5', true || false);
//const CONST_VAR5 = true || false ; //const不支持邏輯運算符,PHP會報語法錯誤
define('DEFINE_VAR6', 'Hello'.' World!');
//const CONST_VAR6 = 'Hello'.' World!' ; //const不支持字元串運算符,PHP會報語法錯誤
class User{
}$user = new User();define('DEFINE_VAR7', $user instanceof User);
//const CONST_VAR7 = $user instanceof User ; //const不支持類型運算符,PHP會報語法錯誤
?>
4.對字元大小寫敏感的支持差異
除上述3個區別外,還有一個不太起眼的區別。函數define()可以接收第3個參數,如果該參數為true,則表示常量名的大小寫不敏感。而使用const關鍵字定義常量卻沒有提供類似的功能。
<?php
//設置編碼為UTF-8,以避免中文亂碼
header('Content-Type:text/html;charset=utf-8');
//define()的第3個參數為true時,表示大小寫不敏感
define('SITE_NAME', 'CodePlayer', true);
echo SITE_NAME; //輸出:CodePlayer
echo site_name; //輸出:CodePlayer
echo SiTe_NamE; //輸出:CodePlayer
const DOMAIN_NAME = '365mini.com';
echo DOMAIN_NAME; //輸出:365mini.com
echo domain_name; //PHP提示常量未定義
echo DomaIN_nAMe; //PHP提示常量未定義
?>
B. php const和define的區別
最突出的一個使用的區別為define不僅可以定義一個固定的值(數字、字元等)還可以定義一個代碼段,而const只能是一個標量;
第二個明顯的區別為:define在編譯時只是進行簡單的替換,沒有類型等錯誤檢查,而const則會,編譯器會進行一些必要的類型檢查;
另外在php中,有這樣一個規定,在5.3之前,const只能在類中使用,在5.3以後,const可以作為全局使用,而使用命名空間namespace時,只能使用const定義常量;即define不能用於類成員變數的定義;
在聲明的區別上有const大小寫敏感,而define可以通過第三個參數區分是否需要;
C. php const和define的區別
使用const使得代碼簡單易讀,const本身就是一個語言結構,而define是一個函數。另外const在編譯時要比define快很多。
(1).const用於類成員變數的定義,一經定義,不可修改。define不可用於類成員變數的定義,可用於全局常量。
(2).const可在類中使用,define不能。
(3).const不能在條件語句中定義常量。
例如:
if (...){
const FOO = 'BAR'; // 無效的invalid
}
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
define('BIT_5', 1 << 5); // 有效的valid
(6).const定義的常量時大小寫敏感的,而define可通過第三個參數(為true表示大小寫不敏感)來指定大小寫是否敏感。
例如:
define('FOO', 'BAR', true);
echo FOO; // BAR
echo foo; // BAR
D. php const和define的區別
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快很多。
E. 關於PHP面向對象中定義常量const和define
?php
define('php',
'i
love
php');
//
在類外面通常這樣定義常量
if
(defined('php'))
{
echo
'php
is
defined!';
}
class
myclass
{
//
常量的值將始終保持不變。在定義和使用常量的時候不需要使用$符號
const
constant
=
'constant
value';
function
showconstant()
{
echo
self::constant
.
'
';
}
}
echo
myclass::constant
.
'
';
$classname
=
'myclass';
echo
$classname::constant
.
'
';
//
php
5.3.0
之後
$class
=
new
myclass();
$class-
showconstant();
echo
$class::constant.'
';
//
php
5.3.0
之後
print_r(get_defined_constants());
//
可以用get_defined_constants()獲取所有定義的常量
F. php const和define的區別
使用const使得代碼簡單易讀,const本身就是一個語言結構,而define是一個函數。另外const在編譯時要比define快很多。
(1).const用於類成員變數的定義,一經定義,不可修改。define不可用於類成員變數的定義,可用於全局常量。
(2).const可在類中使用,define不能。
(3).const不能在條件語句中定義常量。
G. 在php中 define 和 const 都是定義常量,這兩種常量定義的區別
const本身就是一個語言結構,而define是一個函數。另外const在編譯時要比define快很多。
1、const用於類成員變數的定義,一經定義,不可修改。Define不可以用於類成員變數的定義,可用於全局常量。
2、Const可在類中使用,define不能
3、Const不能再條件語句中定義常量
以上
H. php中const和define的區別
define部分:
宏不僅可以用來代替常數值,還可以用來代替表達式,甚至是代碼段。(宏的功能很強大,但也容易出錯,所以其利弊大小頗有爭議。)
宏的語法為:
#define 宏名稱 宏值
作為一種建議和一種廣大程序員共同的習慣,宏名稱經常使用全部大寫的字母。
利用宏的優點:
1)讓代碼更簡潔明了
當然,這有賴於你為宏取一個適當的名字。一般來說,宏的名字更要注重有明確直觀的意義,有時寧可讓它長點。
2)方便代碼維護
對宏的處理,在編譯過程中稱為「預處理」。也就是說在正式編譯前,編譯器必須先將代碼出現的宏,用其相應的宏值替換,這個過程有點你我在文字處理軟體中的查找替換。所以在代碼中使用宏表達常數,歸根結底還是使用了立即數,並沒有明確指定這個量的類型。
const部分
常量定義的格式為:
const 數據類型 常量名 = 常量值;
而const定義的常量具有數據類型,定義數據類型的常量便於編譯器進行數據檢查,使程序可能出現錯誤進行排查。常量必須一開始就指定一個值,然後,在以後的代碼中,我們不允許改變此常量的值。
兩者之間的區別:
內存空間的分配上。define進行宏定義的時候,不會分配內存空間,編譯時會在main函數里進行替換,只是單純的替換,不會進行任何檢查,比如類型,語句結構等,即宏定義常量只是純粹的置放關系,如#define null 0;編譯器在遇到null時總是用0代替null它沒有數據類型(還有疑問請找C語言書籍看預處理部分或者看MSDN.而const定義的常量具有數據類型,定義數據類型的常量便於編譯器進行數據檢查,使程序可能出現錯誤進行排查,所以const與define之間的區別在於const定義常量排除了程序之間的不安全性.
I. php中const與define的使用區別 詳解
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快很多。
J. php const和define的區別
(1).const用於類成員變數的定義,一經定義,不可修改。define不可用於類成員變數的定義,可用於全局常量。
(2).const可在類中使用,define不能。
(3).const不能在條件語句中定義常量。
例如:
if (...){
const FOO = 'BAR'; // 無效的invalid
}
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
define('BIT_5', 1 << 5); // 有效的valid
(6).const定義的常量時大小寫敏感的,而define可通過第三個參數(為true表示大小寫不敏感)來指定大小寫是否敏感。
例如:
define('FOO', 'BAR', true);
echo FOO; // BAR
echo foo; // BAR