# 常量
## 基本介紹
* 常量的定義是一個無法更改其值的變量。
* 常量名以字符或下劃線開始,后面跟隨任意數量的字母、數字、下劃線。
* 常量名中的字母建議都是大寫字母。
* 與變量不同,不應該在常量前面加`$`美元符號。
* 可以通過`define()`函數來定義常量。
* 可以通過`defined()`函數來檢查是否定義了某常量。
* 可以通過`const`關鍵字來定義常量,但類里面不允許,這里官方文檔有點錯亂,看下面介紹:
1. 在 PHP 5.3.0 以后,可以使用 const 關鍵字在類定義之外定義常量,鏈接:http://php.net/manual/zh/language.constants.syntax.php
2. 可以把在類中始終保持不變的值定義為常量,鏈接:http://php.net/manual/zh/language.oop5.constants.php
* 使用 `const` 關鍵字定義常量必須處于代碼庫最頂層的作用區域,因為用此方法是在編譯時定義的。這就意味著不能在函數內,循環內以及 if 語句之內用 `const` 來定義常量。
* 常量只能包含標量數據(boolean,integer,float,string),還可以定義resource常量,但應盡量避免,除非你有準備好迎接突如其來的BUG。
* 通過`get_defined_constants()`函數可以獲取所有已定義的常量。
* 常量和全局變量在不同的作用范圍(命名空間)里,所以無法將常量用于可變變量。
* 如果在某個地方使用了一個未定義的函數,PHP會自動將其加上引號轉成字符串,同時發出警告錯誤。
## 和變量不同之處
* 常量前面沒有美元符號($)
* 常量只能用 `define()`函數 或 `const`關鍵字來定義,而不能通過賦值語句。
* 常量可以不用理會作用域的概念,它可以在任何地方定義和訪問。
* 常量一旦定義就不能更改它的值或是刪除。
* 常量的值只能是標量類型。
## 魔術常量
* 魔術常量的名稱通常由兩個下劃線作為前后綴,由PHP或擴展提供,通常在你想要使用之前它們就已經定義好了。
* 有八個特殊的魔術常量他們的值會隨著代碼而決定,而且還不區分大小寫,如下:
* `__LINE__`:文件中的當前行號。
* `__FILE__`:當前文件的絕對路徑。
* `__DIR__`:當前目錄的絕對路徑。
* `__FUNTION__`:當前函數名稱。
* `__CLASS__`:當前class類的名字。
* `__TRAIT__`:trait的名字。
* `__METHOD__`:當前類的方法名。
* `__NAMESPACE__`:當前命名空間的名稱。
* 還有很多PHP系統預定義的常量,參考鏈接:http://php.net/manual/zh/reserved.constants.php