介紹PHP中常術的用法,包含語法、命名規則和魔術常數(Magic constant)。

 

1. 語法

變數的值會改變而稱為變數,那相對於變數的常數,則是恆常不變的值而稱作常數(Constant)。常數在宣告之後,就無法再改變它的值,除了魔術常數(magic constant)有可能會改變,因為他並非是真正的常數。常數是有大小寫之分,而常數的命名規則和變數一樣,以正規表示法表示如下:

[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

常數的使用和特性如下:

  1. 使用define()函式或const關鍵字宣告常數(PHP 5.3.0之後),但const關鍵字無法用在函式中,且和static類似,必須直接指定值,不可運算。
  2. 常數只能是數值的值,包括布林、整數、浮點數和字串,雖然也可以設為資源,但有可能會出現問題。
  3. 使用常數未定義時,會視為字串使用。可以使用defined()函式來判斷是否已定義。
  4. 和變數不一樣,常數不需要使用錢號($)做開頭。除直接使用外,也可以用constant()函式取得常數值。
  5. 常數沒有範圍(或當作是全域),任何地方宣告使用常數都為同一份。
<?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();
?>

延伸閱讀

上一篇 PHP教學 - 變數(Variables)

下一篇 PHP教學 - 運算子(Operators) - 上

文章標籤
創作者介紹

小殘的程式光廊

emn178 發表在 痞客邦 PIXNET 留言(0) 人氣()