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()函式取得常數值。
常數沒有範圍(或當作是全域),任何地方宣告使用常數都為同一份。
常數只能是數值的值,包括布林、整數、浮點數和字串,雖然也可以設為資源,但有可能會出現問題。
使用常數未定義時,會視為字串使用。可以使用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(); ?>
留言
張貼留言