PHP教學 - 常數(Constants)


介紹PHP中常術的用法,包含語法、命名規則和魔術常數(Magic constant)。
1. 語法
變數的值會改變而稱為變數,那相對於變數的常數,則是恆常不變的值而稱作常數(Constant)。常數在宣告之後,就無法再改變它的值,除了魔術常數(magic constant)有可能會改變,因為他並非是真正的常數。常數是有大小寫之分,而常數的命名規則和變數一樣,以正規表示法表示如下:
[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
常數的使用和特性如下:
    使用define()函式或const關鍵字宣告常數(PHP 5.3.0之後),但const關鍵字無法用在函式中,且和static類似,必須直接指定值,不可運算。
    常數只能是數值的值,包括布林、整數、浮點數和字串,雖然也可以設為資源,但有可能會出現問題。
    使用常數未定義時,會視為字串使用。可以使用defined()函式來判斷是否已定義。
    和變數不一樣,常數不需要使用錢號($)做開頭。除直接使用外,也可以用constant()函式取得常數值。
    常數沒有範圍(或當作是全域),任何地方宣告使用常數都為同一份。
<?php
var_dump(FOOL);                   // string(4) "FOOL", 自動當作字串
 
define("FOOL", "Lala");
const Fool = "Dindin";
var_dump(FOOL);                   // string(4) "Lala"
var_dump(Fool);                   // string(6) "Dindin"
 
function func(){
  var_dump(defined("FOOL"));    // bool(true)
  //const BRA = "F";            // parse error, 不可在函式中使用
  define("BRA", "F");
}
func();
 
var_dump(constant("BRA"));        // string(1) "F"
 
$num = 178;
define("_BOOL", true);
define("_INT", $num);
// const _FLOAT = 169 + 0.99;     // parse error, 必須直接指定值
define("_FLOAT", 169 + 0.99);
define("_ARRAY", array(55, 66));  // 失敗, 但不會出錯
define("_OBJECT", new stdClass);  // 失敗, 但不會出錯
$fp = fopen("res.txt", "rw+");
define("_RESOURCE", $fp);
define("_NULL", NULL);
 
var_dump(_BOOL);                  // bool(true)
var_dump(_INT);                   // int(178)
var_dump(_FLOAT);                 // float(169.99)
var_dump(_ARRAY);                 // string(6) "_ARRAY"
var_dump(_OBJECT);                // string(7) "_OBJECT"
var_dump(_RESOURCE);              // resource(3) of type (stream)
var_dump(_NULL);                  // NULL
fclose($fp);
?>
根據官方文件記載,命名規則應該與變數命名相同,但實際上使用define()函式卻可以使用不合法的命名,但使用時必須透過constant()函式取值。
<?php
define("3M", "300cm");
//const 7-11 = "Always open";  // parse error
 
var_dump(constant("3M"));      // string(5) "300cm"
//var_dump(3M);                // parse error
?>
另外可以利用get_defined_constants()函式取得目前所有的常數。除此之外,類別的常數成員用法與此不同,之後再做討論。
2. 魔術常數
PHP中有很多預定義常數,其中許多部分是來自不同的Extension,除此之外,PHP有另外七種魔術常數(Magic constant),可以取得特別的資訊。雖然他們叫作常數,不過事實上會在不同的地方而有不同的值。
名稱描述
__LINE__目前在檔案中的行數
__FILE__目前檔案的完整檔案路徑
__DIR__目前檔案所在的目錄完整路徑(PHP 5.3.0加入)
__FUNCTION__目前所在的函式名稱(PHP 4.3.0加入)
__CLASS__目前的類別名稱(PHP 4.3.0加入)
__METHOD__類別的成員函式名稱(PHP 5.0.0加入)
__NAMESPACE__目前的命名空間名稱(PHP 5.3.0加入)
一些使用範例如下:
<?php
namespace NamespaceName;
 
class ClassName {
  function MethodName() {
    echo __LINE__;        // 6
    echo __FILE__;        // C:\appserv\www\test.php
    echo __DIR__;         // C:\appserv\www\
    echo __FUNCTION__;    // MethodName
    echo __CLASS__;       // NamespaceName\ClassName
    echo __METHOD__;      // NamespaceName\ClassName::MethodName
    echo __NAMESPACE__;   // NamespaceName
  }
}
 
$obj = new ClassName;
$obj->MethodName();
?>

留言

這個網誌中的熱門文章

c語言-關於#define用法

CMD常用網管指令

PHP 與 JavaScript 之間傳值利用 json