直擊php中static,const與define的使用區別

2020-08-12 20:00:11

define部分:
宏不僅可以用來代替常數值,還可以用來代替表達式,甚至是程式碼段。(宏的功能很強大,但也容易出錯,所以其利弊大小頗有爭議。)
宏的語法爲:
#define 宏名稱 宏值
作爲一種建議和一種廣大程式設計師共同的習慣,宏名稱經常使用全部大寫的字母。

相關學習推薦:(視訊)

利用宏的優點:
1)讓程式碼更簡潔明瞭
當然,這有賴於你爲宏取一個適當的名字。一般來說,宏的名字更要注重有明確直觀的意義,有時寧可讓它長點。
2)方便程式碼維護
對宏的處理,在編譯過程中稱爲「預處理」。也就是說在正式編譯前,編譯器必須先將程式碼出現的宏,用其相應的宏值替換,這個過程有點你我在文書處理軟體中的查詢替換。所以在程式碼中使用宏表達常數,歸根結底還是使用了立即數,並沒有明確指定這個量的型別。
const部分
常數定義的格式爲:
const 數據型別 常數名 = 常數值;
而const定義的常數具有數據型別,定義數據型別的常數便於編譯器進行數據檢查,使程式可能出現錯誤進行排查。常數必須一開始就指定一個值,然後,在以後的程式碼中,我們不允許改變此常數的值。
兩者之間的區別:
記憶體空間的分配上。define進行宏定義的時候,不會分配記憶體空間,編譯時會在main函數裡進行替換,只是單純的替換,不會進行任何檢查,比如型別,語句結構等,即宏定義常數只是純粹的置放關係,

如#define null 0;編譯器在遇到null時總是用0代替null它沒有數據型別,還有疑問請找C語言書籍看預處理部分或者看MSDN.而const定義的常數具有數據型別,定義數據型別的常數便於編譯器進行數據檢查,使程式可能出現錯誤進行排查,所以const與define之間的區別在於const定義常數排除了程式之間的不安全性.

define定義全域性常數,在任何地方都可以存取const用於類成員變數定義,只能用類名存取不能更改要是初學這樣顯理解着就行別太鑽牛角尖就行 PHP5中加入了很多物件導向的思想,PHP5的物件導向比較接近Java的物件導向思想。我們這裏對PHP5中的static和const關鍵字作用進行一下描述,希望對學習PHP5的朋友有幫助。


(1) staticstatic關鍵字在類中是,描述一個成員是靜態的,static能夠限制外部的存取,因爲static後的成員是屬於類的,是不屬於任何物件範例,其他類是無法存取的,只對類的範例共用,能一定程式對該成員盡心保護。類的靜態變數,非常類似全域性變數,能夠被所有類的範例共用,類的靜態方法也是一樣的,類似於全域性函數。類的靜態方法能存取類的靜態的屬性。另外說明的是,static的成員,必須使用self來存取,使用this會出錯。


(2)constconst是一個定義常數的關鍵字,類似於C中的#define,能夠定義一個常數,如果在程式中改變了它的值,那麼會出現錯誤。舉例說明上面的程式碼:

程式碼如下:

<?php 
class Counter 
{ 
private static $count = 0;//定義一個靜態屬性 
const VERSION = 2.0;//定義一個常數 
//建構函式 
function __construct() 
{ 
self::$count++; 
} 
//解構函式 
function __destruct() 
{ 
self::$count--; 
} 
//定義一個靜態的方法 
static function getCount() 
{ 
return self::$count; 
} 
} 
//建立一個範例 
$c = new Counter(); 
//執行列印 
print( Counter::getCount(). "<br>\n" ); //使用直接輸入類名來存取靜態方法Counter::getCount 
//列印類的版本 
print( "Version useed: " .Counter::VERSION. "<br>\n" ); 
?>

相關推薦:

以上就是直擊php中static,const與define的使用區別的詳細內容,更多請關注php中文網其它相關文章!